summaryrefslogtreecommitdiff
path: root/ChangeLog.pre-2-2
AgeCommit message (Collapse)Author
2000-08-31glib.h glib.def New function, to make a GPollFD from a GIOChannel. CreatesTor Lillqvist
2000-08-31 Tor Lillqvist <tml@iki.fi> * glib.h * glib.def * giowin32.c (g_io_channel_win32_make_pollfd): New function, to make a GPollFD from a GIOChannel. Creates the events and starts the reader thread if necessary.
2000-08-31glib.h No use for separate condition parameter.Tor Lillqvist
2000-08-31 Tor Lillqvist <tml@iki.fi> * glib.h * giowin32.c (g_io_channel_win32_poll): No use for separate condition parameter.
2000-08-31Simplify, use GetSystemTimeAsFileTime().Tor Lillqvist
2000-08-31 Tor Lillqvist <tml@iki.fi> * gmain.c (g_get_current_time): (Win32): Simplify, use GetSystemTimeAsFileTime().
2000-08-27Hmm, the parameter to g_io_channel_win32_poll() should be a GPollFD array,Tor Lillqvist
2000-08-27 Tor Lillqvist <tml@iki.fi> Hmm, the parameter to g_io_channel_win32_poll() should be a GPollFD array, not GIOChannel. That way the caller can know which channels cause the callback.
2000-08-27New function, otherwise like g_io_channel_win32_wait_for_condition(), butTor Lillqvist
2000-08-27 Tor Lillqvist <tml@iki.fi> * giowin32.c (g_io_channel_win32_poll): New function, otherwise like g_io_channel_win32_wait_for_condition(), but accept several GIOChannels. (g_io_channel_win32_wait_for_condition): Call g_io_channel_win32_poll(). * glib.h: Declare g_io_channel_win32_poll(). * gwin32.c (g_win32_error_message): Don't believe return value from FormatMessage.
2000-08-25Mark the following functions G_GNUC_CONST (to allow betteroptimization)Elliot Lee
2000-08-25 Elliot Lee <sopwith@redhat.com> * glib.h, gunicode.h, gmodule/gmodule.h: Mark the following functions G_GNUC_CONST (to allow betteroptimization) because their results are a function of only their parameters: g_int_hash, g_int_equal, g_direct_hash, g_direct_equal, g_quark_to_string, g_date_is_leap_year, g_date_days_in_month, g_date_monday_weeks_in_year, g_date_sunday_weeks_in_year, g_spaced_primes_closest, g_unichar_is*, g_unichar_to*, g_unichar_*digit_value, g_unichar_type
2000-08-21Fix inclusion of config.hElliot Lee
Fix inclusion of config.h
2000-08-21Fix a couple of trivial bugs that were causing warnings.Owen Taylor
Mon Aug 21 14:46:23 2000 Owen Taylor <otaylor@redhat.com> * tests/gio-test.c: Fix a couple of trivial bugs that were causing warnings. Mon Aug 21 14:39:36 2000 Owen Taylor <otaylor@redhat.com> * glib.h: Use C99 varargs macros where possible (check __STDC_VERSION__), otherwise, on gcc, use an alternate form of gcc varargs which is more likely to be supported going forward. (Based on some code from Raja Harinath)
2000-08-17Return the data left behind. Return the data left behind.Darin Adler
* glib.h: * garray.c: (g_array_free), (g_ptr_array_free), (g_byte_array_free): Return the data left behind. * gstring.c: (g_string_free): Return the data left behind. Changed the free calls that leave data behind so they return a pointer to the left-behind data, NULL if told not to leave anything behind. This makes these calls easier to use correctly, without any incompatible API change for callers that don't know about the return value. Of course, it would be even clearer if the free calls weren't dual-purpose in the first place.
2000-08-11Some indentation and spacing fixes. Add some more logging.Tor Lillqvist
2000-08-12 Tor Lillqvist <tml@iki.fi> * giowin32.c: Some indentation and spacing fixes. Add some more logging. (g_io_win32_add_watch): New function, with common code from g_io_win32_fd_add_watch and g_io_win32_sock_add_watch. Don't start more than one reader thread for a GIOChannel. We should obviously have just one reader thread reading a file descriptor or socket.
2000-08-11don't duplicate glib CflagsHavoc Pennington
2000-08-10 Havoc Pennington <hp@redhat.com> * gthread-2.0.pc.in (Cflags): don't duplicate glib Cflags * gmodule-2.0.pc.in (Cflags): don't duplicate glib Cflags * gobject-2.0.pc.in (Cflags): don't duplicate Cflags from glib itself
2000-08-11Look in glib-2.0/include for glibconfig.hHavoc Pennington
2000-08-10 Havoc Pennington <hp@redhat.com> * glib-2.0.pc.in (Cflags): Look in glib-2.0/include for glibconfig.h
2000-08-06New function, that calls g_source_remove(). Check return value ofTor Lillqvist
2000-08-07 Tor Lillqvist <tml@iki.fi> * tests/gio-test.c (shutdown_source): New function, that calls g_source_remove(). Check return value of g_source_remove(), and decrement running subprocess counter only if g_source_remove() actually did remove the source. (recv_message): Call shutdown_source() on EOF condition. Return FALSE on G_IO_HUP and G_IO_ERR condition. Fix printf format typo.
2000-08-06keep *last updated while running through the domain list, so we don'tTim Janik
Sun Aug 6 20:06:02 2000 Tim Janik <timj@gtk.org> * gmessages.c (g_log_domain_check_free): keep *last updated while running through the domain list, so we don't screw up the removal, patch provided by Gady Kozma <gadykozma@hotmail.com>. Sun Aug 6 20:03:41 2000 Tim Janik <timj@gtk.org> * gmessages.c (g_log_remove_handler): keep *last updated while running through the handler list, so we don't screw up the removal.
2000-07-31Fix stray characterOwen Taylor
Sun Jul 30 16:54:13 2000 Owen Taylor <otaylor@redhat.com> * gunicode.h: Fix stray character * gutf8.c (g_unichar_to_utf8): Allow outbuf to be NULL, in which case we just compute the length.
2000-07-31forgot to add .pc.in to EXTRA_DISTHavoc Pennington
2000-07-31 Havoc Pennington <hp@redhat.com> * Makefile.am (EXTRA_DIST): forgot to add .pc.in to EXTRA_DIST
2000-07-31pkg-config data filesHavoc Pennington
2000-07-31 Havoc Pennington <hp@redhat.com> * glib-2.0.pc.in, gobject-2.0.pc.in, gmodule-2.0.pc.in, gobject-2.0.pc.in: pkg-config data files * Makefile.am: Install/dist the .pc files * configure.in: Output the .pc files
2000-07-31The code didn't compile (must have been sleepy when committing). "return"Tor Lillqvist
2000-07-31 Tor Lillqvist <tml@iki.fi> * giowin32.c (buffer_read): The code didn't compile (must have been sleepy when committing). "return" instead of "break" (g_io_win32_fd_add_watch): Cannot check if the file descriptor is readable by calling ReadFile to read zero bytes. ReadFile blocks on NT even if trying to read nothing at all. So, don't check if file descriptor is readable; assume this function isn't called otherwise.
2000-07-30fix tor's recent changes which got rid of a required variable in theTim Janik
Sun Jul 30 10:44:16 2000 Tim Janik <timj@gtk.org> * gmain.c (g_get_current_time): fix tor's recent changes which got rid of a required variable in the non-windows path.
2000-07-30Compile in the debugging code all the time, but only output debug messagesTor Lillqvist
2000-07-30 Tor Lillqvist <tml@iki.fi> * giowin32.c: Compile in the debugging code all the time, but only output debug messages if told so. Add (unadvertised) function to turn on/off debug messages for a channel. (buffer_read): Don't loop. It is expected behaviour to return a short read occasionally, for instance when reading from pipes. It's the calling code that should loop if it *knows* how much the writer has written. * tests/gio-test.c: Correct the program's name in the output. (recv_message): Loop calling g_io_channel_read() (in a new function read_all()) until we have all the bytes we want (that we know the writer has written/will write).
2000-07-29Finally, a new and improved IO Channel and condition watch implementationTor Lillqvist
2000-07-30 Tor Lillqvist <tml@iki.fi> Finally, a new and improved IO Channel and condition watch implementation for Win32. Based on code provided by Craig Setera. When watching file descriptors, for which there is no select() like functionality on Win32 that would work on all Win32 platforms for all types of file descriptors (including anonymous pipes), we start a new thread that blocks while trying to read from the file descriptor. When the read returns, a Win32 Event is signalled that the polling routine eventually notices. Meanwhile, the data being read is stored in a circular buffer, from where the IO channel's read() method picks it up. If the buffer fills up the reading thread has to wait for space becoming available. For this another Win32 Event is used. The IO Channel's read() method signals this when it has read some data out of the buffer. The separate reader thread(s), and the circular buffer(s) with associated events mean lots of possibilities for fun parallellism errors. But it seems to work OK, i.e. GIMP runs. * gmain.c: Small changes to the Win32 polling function. (g_main_win32_get_poll_func): New function. Perhaps it would be a good idea to provide this on all platforms. * giowin32.c: The bulk of the new implementation. (g_io_channel_win32_wait_for_condition): New function. To be used where on Unix one does a select() on the channel's fd, like libgimp's gimp_extension_process(). Could be provided on all platforms. * glib.h: Update documentation for IO Channels on Win32. Remove the declarations for the as of now obsolete old functions related to IO Channels for pipes with "wakeup" messages. * glib.def: Some new functions. * tests/gio-test.c: New file, to test GIOChannel and main loop. * tests/Makefile.am * tests/makefile.mingw.in: Add it.
2000-07-27completed tor's fix to cover both #ifdef branches.Tim Janik
Thu Jul 27 05:15:11 2000 Tim Janik <timj@gtk.org> * gstrfuncs.c (g_strlcpy, g_strlcat): completed tor's fix to cover both #ifdef branches.
2000-07-26Return 0 on error, not NULL.Tor Lillqvist
2000-07-26 Tor Lillqvist <tml@iki.fi> * gstrfuncs.c (g_strlcpy, g_strlcat): Return 0 on error, not NULL. * glib.def: Add g_strlcpy, g_strlcat. * glibconfig.h.win32.in: Add gsize and gssize.
2000-07-26applied patch from Andreas Persenius <ndap@swipnet.se> that updates theTim Janik
Wed Jul 26 12:59:31 2000 Tim Janik <timj@gtk.org> * *.[hc]: applied patch from Andreas Persenius <ndap@swipnet.se> that updates the license headers to the GNU Lesser General Public License, as well as updating the copyright year to 2000.
2000-07-26added g_strlcat() and g_strlcpy() wrappers, supplied by David WheelerTim Janik
Wed Jul 26 05:47:48 2000 Tim Janik <timj@gtk.org> * configure.in: * testglib.c: * gstrfuncs.c: * glib.h: added g_strlcat() and g_strlcpy() wrappers, supplied by David Wheeler <dwheeler@ida.org>: * glib.h, gstrfuncs.c: added g_strlcpy and g_strlcat to support safe manipulation of fixed-length string buffers. These functions were originally developed by Todd Miller to simplify development of security-related programs, and are available on many (but not all) Unix-like systems, including OpenBSD, FreeBSD, and Solaris. See ftp://ftp.openbsd.org/pub/OpenBSD/src/lib/libc/string/strlcpy.3 and http://www.openbsd.org/security.html. If there's a strlcpy/strlcat on the system, it's called, otherwise an implementation is provided. * testglib.c: Added tests for g_strlcpy, g_strlcat.
2000-07-26include <stdlib.h> and <stddef.h> if STDC_HEADERS is defined.Tim Janik
Wed Jul 26 05:03:24 2000 Tim Janik <timj@gtk.org> * acglib.m4 (GLIB_SIZEOF): include <stdlib.h> and <stddef.h> if STDC_HEADERS is defined. * glib.h: * glibconfig.h: define gsize and gssize in terms of GLIB_SIZEOF_SIZE_T * glib.h (g_return_if_reached): applied darin's fix for copy'n paste error in the macro implementation.
2000-07-25applied patch from Darin Adler <darin@eazel.com> which suppliesTim Janik
Wed Jul 26 00:46:03 2000 Tim Janik <timj@gtk.org> * glib.h: applied patch from Darin Adler <darin@eazel.com> which supplies g_return_if_reached(), g_return_val_if_reached() and g_critical().
2000-07-22Fix resource handling, the resource file got left out from the DLL afterTor Lillqvist
2000-07-22 Tor Lillqvist <tml@iki.fi> * build-dll: Fix resource handling, the resource file got left out from the DLL after all... Remove the WIN32APIHEADERS, not needed with current windres. * glib.def: Add new functions.
2000-07-20Mark the functions g_basename and g_dirname deprecated. They will issue anSebastian Wilhelmi
2000-07-20 Sebastian Wilhelmi <wilhelmi@ira.uka.de> * gutils.c, glib.h: Mark the functions g_basename and g_dirname deprecated. They will issue an warning once, when compiled with G_ENABLE_DEBUG, but continue to work as before. Instead the functions g_path_get_basename and g_path_get_dirname should be used, which BOTH return newly allocated memory, that has to freed by g_free. The new g_path_get_basename now strips trailing slashes from the path. This fixes #5097. For discussion see http://mail.gnome.org/pipermail/gtk-devel-list/2000-April/003139.html * gwin32.c, testglib.c, tests/dirname-test.c: Use the new functions instead of the old ones. * gmodule/libgplugin_a.c, gmodule/testgmodule.c: Use g_path_get_basename instead of the deprecated g_basename.
2000-07-20Mark the functions g_hash_table_freeze, g_hash_table_thaw and thusSebastian Wilhelmi
2000-07-20 Sebastian Wilhelmi <wilhelmi@ira.uka.de> * ghash.c, gscanner.c, glib.h: Mark the functions g_hash_table_freeze, g_hash_table_thaw and thus g_scanner_freeze_symbol_table and g_scanner_thaw_symbol_table deprecated. They will issue an warning once, when compiled with G_ENABLE_DEBUG. This fixes Bug #3883. For discussion see http://mail.gnome.org/pipermail/gtk-devel-list/2000-April/003139.html
2000-07-19glibconfig.h and glib.h now include files outside of the extern "C" block.Sebastian Wilhelmi
2000-07-19 Sebastian Wilhelmi <wilhelmi@ira.uka.de> * configure.in, glib.h: glibconfig.h and glib.h now include files outside of the extern "C" block. Makes some C++ compiler happy. Reported by Denis Vakatov <vakatov@peony.nlm.nih.gov>. * gmodule/gmodule.h: include glib.h before doing extern "C". Makes some C++ compiler happy. Reported by Denis Vakatov <vakatov@peony.nlm.nih.gov>.
2000-07-16Remove incomplete start of info file -Owen Taylor
Sat Jul 15 23:49:03 2000 Owen Taylor <otaylor@redhat.com> * glib/glib.texi: Remove incomplete start of info file -
2000-07-15Add build/Makefile and build/win32/Makefile to AC_OUTPUT() so things buildOwen Taylor
Sat Jul 15 22:44:22 2000 Owen Taylor <otaylor@redhat.com> * configure.in: Add build/Makefile and build/win32/Makefile to AC_OUTPUT() so things build again.
2000-07-15fixed an off by 0 error (yeah, the function went off when the while (n--)Tim Janik
Sat Jul 15 09:11:46 2000 Tim Janik <timj@gtk.org> * gstrfuncs.c (g_strncasecmp): fixed an off by 0 error (yeah, the function went off when the while (n--) loop failed due to n==0 ;), reported by Jean-Louis HAMEL <jlhamel@club-internet.fr>.
2000-07-14Include the "build" module in GLib, too, to make it more self-contained.Tor Lillqvist
2000-07-15 Tor Lillqvist <tml@iki.fi> * Makefile.am (SUBDIRS): Include the "build" module in GLib, too, to make it more self-contained. If your CVS client doesn't automatically get it, do a cvs get build in glib. * */makefile.mingw.in: Include make.mingw from build in the glib source directory.
2000-07-14Release 1.3.1upstream/GLIB_1_3_1Owen Taylor
Fri Jul 14 16:26:35 2000 Owen Taylor <otaylor@redhat.com> * Release 1.3.1
2000-07-14Move glib-config to glib-config-2.0 move glib.m4 to glib-2.0.m4Owen Taylor
Fri Jul 14 12:22:49 2000 Owen Taylor <otaylor@redhat.com> * configure.in Makefile.am glib-config.m4 glib.m4: Move glib-config to glib-config-2.0 move glib.m4 to glib-2.0.m4 * Makefile.am gobject/Makefile.am gmodule/Makefile.am gthread/Makefile.am tests/Makefile.am: Change library names to libglib-1.3.la, etc, so that we can distinguish glib-1.2 and glib-2.0 on the linkline. * Makefile.am gobject/Makefile.am gmodule/Makefile.am: Move include files into /usr/include/glib-2.0. Thu Jul 6 18:54:49 2000 Owen Taylor <otaylor@redhat.com> * docs/Makefile.am (EXTRA_DIST): Remove info files from the build.
2000-07-13Add g_error functions.Tor Lillqvist
2000-07-14 Tor Lillqvist <tml@iki.fi> * glib.def: Add g_error functions. * makefile.mingw.in: Add gbacktrace.o. * gbacktrace.c: No need to include <process.h>.
2000-07-12#include <gerror.h>Havoc Pennington
2000-07-12 Havoc Pennington <hp@redhat.com> * glib.h: #include <gerror.h> * Makefile.am (include_HEADERS): Add gerror.h (libglib_la_SOURCES): Add gbacktrace.c * gbacktrace.c: Move g_on_error_query() in here (moved on the server, so history is preserved) * gerror.h: GError interface * gerror.c: GError implementation replaces stuff that's now in gbacktrace.c
2000-07-10Move string.h include into the .c file instead of where it was in the .hOwen Taylor
Sun Jul 9 21:21:46 2000 Owen Taylor <otaylor@redhat.com> * genums.[ch]: Move string.h include into the .c file instead of where it was in the .h file by mistake. Sun Jul 9 21:20:45 2000 Owen Taylor <otaylor@redhat.com> * gunicode.h: Include stddef.h instead of stdlib.h
2000-07-08Rename the GUTILS_C_VAR macro to GLIB_VAR.Tor Lillqvist
2000-07-08 Tor Lillqvist <tml@iki.fi> * glib.h (GLIB_VAR): Rename the GUTILS_C_VAR macro to GLIB_VAR. * gunicode.h: Mark the g_utf8_skip array with GLIB_VAR. * glib.def: Add two missing entry points.
2000-07-06Release 1.3.1Owen Taylor
Thu Jul 6 15:35:28 2000 Owen Taylor <otaylor@redhat.com> * Release 1.3.1 * Makefile.am (EXTRA_DIST): Dist fixes. * configure.in: Moderate the warnings just a little bit.
2000-07-04Update README.win32.Tor Lillqvist
2000-07-03Fix up to correspond to configure.in checks.Owen Taylor
Mon Jul 3 17:58:02 2000 Owen Taylor <otaylor@redhat.com> * gutf8.c (g_utf8_get_charset_internal): Fix up to correspond to configure.in checks.
2000-07-03Comment g_get_codeset() out of the header file temporarily. (Very similarOwen Taylor
Mon Jul 3 17:18:19 2000 Owen Taylor <otaylor@redhat.com> * glib.h: Comment g_get_codeset() out of the header file temporarily. (Very similar to g_get_charset(), need to resolve the two.)
2000-06-30Add new entry points.Tor Lillqvist
2000-07-01 Tor Lillqvist <tml@iki.fi> * glib.def: Add new entry points. * makefile.{mingw,msc}.in: Add the new Unicode object files. 2000-07-01 Tor Lillqvist <tml@iki.fi> * gobject.def: Update added and renamed entry points. * makefile.mingw.in: Add gvaluetypes.o.
2000-06-29updatedOwen Taylor
Thu Jun 29 15:57:28 2000 Owen Taylor <otaylor@redhat.com> * NEWS: updated * Makefile.am: added snapcheck target to go along with snapshot * gstring.c glib.h (g_string_hash): Add g_string_hash to go along with g_string_equal. Tue Jun 27 12:40:23 EDT 2000 David A. Wheeler <dwheeler@dwheeler.com> * glib.h: Added g_string_equal for comparing GStrings; changed g_str_equal so it returns gboolean (instead of gint). * gstring.c: Modified GString implementation to support embedded ASCII NUL ('\0') characters, and implemented g_string_equal. * testglib.c tests/string-test.c: Added tests for g_string_equal and tests for proper handling of embedded ASCII NUL characters.
2000-06-29FixOwen Taylor
Wed Jun 28 22:52:00 2000 Owen Taylor <otaylor@redhat.com> * Makefile.am (libglib_la_SOURCES): Fix
2000-06-24define gstring in terms of gchar*. this typedef reflects the type name ofTim Janik
Fri Jun 23 17:20:26 2000 Tim Janik <timj@gtk.org> * glib.h: define gstring in terms of gchar*. this typedef reflects the type name of the primitive G_TYPE_STRING in the gobject module. Sat Jun 24 23:03:04 2000 Tim Janik <timj@gtk.org> * gtype.[hc]: provide G_TYPE_CHAR, G_TYPE_UCHAR, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_UINT, G_TYPE_LONG, G_TYPE_ULONG, G_TYPE_FLOAT, G_TYPE_DOUBLE and G_TYPE_STRING fundamental types. added a GTypeValueTable* pointer to GTypeInfo structure for types to implement GValue handling functions. GTypeValueTable contains the following members: value_init(): initialize a GValue structure. value_free(): free GValue structure contents (optional). value_copy(): copy one GValue contents to another GValue structure of collect_type: varargs collection type for the first variable argument to be collected by collect_value(). collect_value(): variable arguments collection function (optional). lcopy_type: varargs collection type for the first variable argument to be location copyied by lcopy_value(). lcopy_value(): variable arguments location copy function (optional). g_type_value_table_peek(): new function to retrive the GTypeValueTable* for a type node. ValueTables get inherited from parent types, unless overridden through the GTypeInfo structure. internally, GTypeValueTable support means an added overhead of one pointer per static or used dynamic type node. g_type_add_class_cache_func(): provide a cache_func/data pair to be called prior to a type nodes last_unref() function, this can be used to prevent premature class destruction. multiple installed cache_func() will be chained upon last_unref() untill one of them returns TRUE. the cache_func()s have to check the type id passed in to figure whether they actually wants to cache the class of this type (since any types are routed through the cache_func() chain). g_type_remove_class_cache_func(): remove a previously installed cache_func/data pair. the cache maintained by this function has to be clear when calling g_type_remove_class_cache_func() to avoid leaks. g_type_class_unref_uncached(): class unref function for cache_func() implementations, unreferences a class omitting the cache chain (and therefore unref->cache->unref->... loops). * gvaluetypes.[hc]: provide the value setters/getters for the primitive fundamental types boolean, char, uchar, int, uint, long, ulong, float, double and string. * gvalue.[hc]: provide G_TYPE_IS_VALUE() in terms of whether a GTypeValueTable is provided for this type. removed g_value_init_default(), g_value_validate(), g_value_defaults(), g_value_set_default() and g_values_cmp() as these are supplied by the GParamSpec API now. moved g_values_exchange() into the "implementation details" section, since it just provides the underlying functionality for g_value_convert(). * gvaluecollector.h: renamed the varargs value container from GParamCValue to GTypeCValue as the value collection methods are supplied by the type system now. G_PARAM_COLLECT_VALUE() and G_PARAM_LCOPY_VALUE() got renamed to G_VALUE_COLLECT() and G_VALUE_LCOPY() and operate without a GParamSpec structure now. * genums.h: macros cleanups/fixes. * genum.c: provide G_TYPE_ENUM and G_TYPE_FLAGS type and assorted g_value_{s|g}et_{enum|flags}() implementations. * gobject.[hc]: provide G_IS_VALUE_OBJECT(), G_TYPE_OBJECT ValueTable methods and g_value_{s|g}et_object(). * gparam.[hc]: reduced class to value_set_default(), value_validate() and values_cmp(). also parameters now need to fill in a GType value_type; field to indicate the GValue type they are handling. provide g_param_value_set_default(), g_param_value_defaults(), g_param_value_validate() and g_param_values_cmp(). * gparamspecs.[hc]: got rid of the g_value_* functions and the G_IS_VALUE_* macros. adapted param spec implementations according to the GParamSpecClass changes.
2000-06-21Initial pass at adding unicode support functions. A few things still needOwen Taylor
Wed Jun 21 12:09:03 2000 Owen Taylor <otaylor@redhat.com> * gunicode.h gutf8.c guniprop.c gunidecomp.[ch] gunichartables.h Makefile.am glib.h: Initial pass at adding unicode support functions. A few things still need to be implemented, a bit of cleanup needs to be done, tests need to be added, and the docs need to be finished, but this should allow replacing most or all use of libunicode.