From c19654ad40864b6a8fce635b019d9889f7871c68 Mon Sep 17 00:00:00 2001 From: Evan Miller Date: Sun, 11 Oct 2020 14:59:08 -0400 Subject: [PATCH] Remove gmdb2 Split off the Gnome MDB file viewer into its own project: https://github.com/mdbtools/gmdb2 This simplifies the build process somewhat and lets us focus on the core project. (For starters, no more -Wno-portability flag!) --- .gitignore | 5 +- .travis.yml | 14 + README.md | 4 +- configure.ac | 37 +- doc/Makefile.am | 5 +- doc/gmdb2.txt | 30 - doc/mdb-array.txt | 4 +- doc/mdb-export.txt | 4 +- doc/mdb-header.txt | 4 +- doc/mdb-hexdump.txt | 4 +- doc/mdb-import.txt | 2 +- doc/mdb-parsecsv.txt | 4 +- doc/mdb-prop.txt | 4 +- doc/mdb-schema.txt | 4 +- doc/mdb-sql.txt | 5 +- doc/mdb-tables.txt | 2 +- doc/mdb-ver.txt | 2 +- gnome-doc-utils.make | 706 ----------- m4/gnome-doc-utils.m4 | 61 - mdbtools.spec.in | 21 +- src/Makefile.am | 2 +- src/gmdb2/Makefile.am | 17 - src/gmdb2/debug.c | 1089 ----------------- src/gmdb2/file.c | 279 ----- src/gmdb2/gladefiles/Makefile.am | 15 - src/gmdb2/gladefiles/gmdb-debug.glade | 364 ------ src/gmdb2/gladefiles/gmdb-export.glade | 324 ----- src/gmdb2/gladefiles/gmdb-prefs.glade | 108 -- src/gmdb2/gladefiles/gmdb-props.glade | 307 ----- src/gmdb2/gladefiles/gmdb-schema.glade | 376 ------ src/gmdb2/gladefiles/gmdb-sql.glade | 403 ------ src/gmdb2/gladefiles/gmdb-tabledef.glade | 276 ----- src/gmdb2/gladefiles/gmdb.glade | 821 ------------- src/gmdb2/gmdb.bash-completion | 12 - src/gmdb2/gmdb.desktop | 13 - src/gmdb2/gmdb.h | 101 -- src/gmdb2/help/C/figures/gmdb2_sql_window.png | Bin 46273 -> 0 bytes src/gmdb2/help/C/figures/gmdb2_window.png | Bin 23546 -> 0 bytes src/gmdb2/help/C/gmdb.xml | 432 ------- src/gmdb2/help/C/legal.xml | 76 -- src/gmdb2/help/Makefile.am | 7 - src/gmdb2/help/gmdb.omf.in | 10 - src/gmdb2/info.c | 127 -- src/gmdb2/main2.c | 200 --- src/gmdb2/pixmaps/Makefile.am | 23 - src/gmdb2/pixmaps/code.xpm | 22 - src/gmdb2/pixmaps/debug.xpm | 23 - src/gmdb2/pixmaps/form_big.xpm | 234 ---- src/gmdb2/pixmaps/forms.xpm | 126 -- src/gmdb2/pixmaps/logo.xpm | 92 -- src/gmdb2/pixmaps/macro_big.xpm | 263 ---- src/gmdb2/pixmaps/macros.xpm | 137 --- src/gmdb2/pixmaps/module_big.xpm | 25 - src/gmdb2/pixmaps/pk.xpm | 24 - src/gmdb2/pixmaps/query.xpm | 46 - src/gmdb2/pixmaps/query_big.xpm | 29 - src/gmdb2/pixmaps/report_big.xpm | 217 ---- src/gmdb2/pixmaps/reports.xpm | 95 -- src/gmdb2/pixmaps/stock_export-16.png | Bin 646 -> 0 bytes src/gmdb2/pixmaps/stock_export.png | Bin 1278 -> 0 bytes src/gmdb2/pixmaps/table.xpm | 19 - src/gmdb2/pixmaps/table_big.xpm | 36 - src/gmdb2/prefs.c | 114 -- src/gmdb2/schema.c | 219 ---- src/gmdb2/sql.c | 751 ------------ src/gmdb2/table.c | 199 --- src/gmdb2/table_data.c | 120 -- src/gmdb2/table_def.c | 535 -------- src/gmdb2/table_export.c | 326 ----- 69 files changed, 45 insertions(+), 9911 deletions(-) delete mode 100644 doc/gmdb2.txt delete mode 100644 gnome-doc-utils.make delete mode 100644 m4/gnome-doc-utils.m4 delete mode 100644 src/gmdb2/Makefile.am delete mode 100644 src/gmdb2/debug.c delete mode 100644 src/gmdb2/file.c delete mode 100644 src/gmdb2/gladefiles/Makefile.am delete mode 100644 src/gmdb2/gladefiles/gmdb-debug.glade delete mode 100644 src/gmdb2/gladefiles/gmdb-export.glade delete mode 100644 src/gmdb2/gladefiles/gmdb-prefs.glade delete mode 100644 src/gmdb2/gladefiles/gmdb-props.glade delete mode 100644 src/gmdb2/gladefiles/gmdb-schema.glade delete mode 100644 src/gmdb2/gladefiles/gmdb-sql.glade delete mode 100644 src/gmdb2/gladefiles/gmdb-tabledef.glade delete mode 100644 src/gmdb2/gladefiles/gmdb.glade delete mode 100644 src/gmdb2/gmdb.bash-completion delete mode 100644 src/gmdb2/gmdb.desktop delete mode 100644 src/gmdb2/gmdb.h delete mode 100644 src/gmdb2/help/C/figures/gmdb2_sql_window.png delete mode 100644 src/gmdb2/help/C/figures/gmdb2_window.png delete mode 100644 src/gmdb2/help/C/gmdb.xml delete mode 100644 src/gmdb2/help/C/legal.xml delete mode 100644 src/gmdb2/help/Makefile.am delete mode 100644 src/gmdb2/help/gmdb.omf.in delete mode 100644 src/gmdb2/info.c delete mode 100644 src/gmdb2/main2.c delete mode 100644 src/gmdb2/pixmaps/Makefile.am delete mode 100644 src/gmdb2/pixmaps/code.xpm delete mode 100644 src/gmdb2/pixmaps/debug.xpm delete mode 100644 src/gmdb2/pixmaps/form_big.xpm delete mode 100644 src/gmdb2/pixmaps/forms.xpm delete mode 100644 src/gmdb2/pixmaps/logo.xpm delete mode 100644 src/gmdb2/pixmaps/macro_big.xpm delete mode 100644 src/gmdb2/pixmaps/macros.xpm delete mode 100644 src/gmdb2/pixmaps/module_big.xpm delete mode 100644 src/gmdb2/pixmaps/pk.xpm delete mode 100644 src/gmdb2/pixmaps/query.xpm delete mode 100644 src/gmdb2/pixmaps/query_big.xpm delete mode 100644 src/gmdb2/pixmaps/report_big.xpm delete mode 100644 src/gmdb2/pixmaps/reports.xpm delete mode 100644 src/gmdb2/pixmaps/stock_export-16.png delete mode 100644 src/gmdb2/pixmaps/stock_export.png delete mode 100644 src/gmdb2/pixmaps/table.xpm delete mode 100644 src/gmdb2/pixmaps/table_big.xpm delete mode 100644 src/gmdb2/prefs.c delete mode 100644 src/gmdb2/schema.c delete mode 100644 src/gmdb2/sql.c delete mode 100644 src/gmdb2/table.c delete mode 100644 src/gmdb2/table_data.c delete mode 100644 src/gmdb2/table_def.c delete mode 100644 src/gmdb2/table_export.c diff --git a/.gitignore b/.gitignore index 6264b65..d0c8cb6 100644 --- a/.gitignore +++ b/.gitignore @@ -30,8 +30,6 @@ libtool mdbtools.spec types.h src/extras/mdb-hexdump -src/gmdb2/gmdb2 -src/gmdb2/help/gmdb-C.omf src/odbc/unittest src/sql/lexer.c src/sql/parser.c @@ -39,11 +37,12 @@ src/sql/parser.h src/util/mdb-array src/util/mdb-count src/util/mdb-export -src/util/mdb-exportjson +src/util/mdb-json src/util/mdb-header src/util/mdb-import src/util/mdb-parsecsv src/util/mdb-prop +src/util/mdb-queries src/util/mdb-schema src/util/mdb-sql src/util/mdb-tables diff --git a/.travis.yml b/.travis.yml index 5645f47..8c55207 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,7 @@ jobs: packages: - libiodbc2-dev - gawk + - gtk-doc-tools env: - CONFIGURE_FLAGS="--with-iodbc=/usr --disable-glib" - compiler: clang @@ -20,6 +21,7 @@ jobs: - libiodbc2-dev - libglib2.0-dev - gawk + - gtk-doc-tools env: - CONFIGURE_FLAGS="--with-iodbc=/usr --enable-glib" - compiler: clang @@ -29,6 +31,7 @@ jobs: packages: - unixodbc-dev - gawk + - gtk-doc-tools env: - CONFIGURE_FLAGS="--with-unixodbc=/usr --disable-glib" - compiler: clang @@ -39,6 +42,7 @@ jobs: - unixodbc-dev - libglib2.0-dev - gawk + - gtk-doc-tools env: - CONFIGURE_FLAGS="--with-unixodbc=/usr --enable-glib" - compiler: gcc @@ -48,6 +52,7 @@ jobs: packages: - libiodbc2-dev - gawk + - gtk-doc-tools env: - CONFIGURE_FLAGS="--with-iodbc=/usr --disable-glib" - compiler: gcc @@ -57,6 +62,7 @@ jobs: packages: - unixodbc-dev - gawk + - gtk-doc-tools env: - CONFIGURE_FLAGS="--with-unixodbc=/usr --disable-glib" - compiler: gcc-10 @@ -69,6 +75,7 @@ jobs: - gcc-10 - libiodbc2-dev - gawk + - gtk-doc-tools env: - CONFIGURE_FLAGS="--with-iodbc=/usr --disable-glib" - compiler: gcc-10 @@ -81,6 +88,7 @@ jobs: - gcc-10 - unixodbc-dev - gawk + - gtk-doc-tools env: - CONFIGURE_FLAGS="--with-unixodbc=/usr --disable-glib" - compiler: clang @@ -92,6 +100,7 @@ jobs: - libiodbc - bison - gawk + - gtk-doc env: - CONFIGURE_FLAGS="--with-iodbc=/usr/local/opt --disable-glib" - YACC="/usr/local/opt/bison/bin/bison" @@ -105,6 +114,7 @@ jobs: - glib - bison - gawk + - gtk-doc env: - CONFIGURE_FLAGS="--with-iodbc=/usr/local/opt --enable-glib" - YACC="/usr/local/opt/bison/bin/bison" @@ -117,6 +127,7 @@ jobs: - unixodbc - bison - gawk + - gtk-doc env: - CONFIGURE_FLAGS="--with-unixodbc=/usr/local/opt --disable-glib" - YACC="/usr/local/opt/bison/bin/bison" @@ -130,6 +141,7 @@ jobs: - glib - bison - gawk + - gtk-doc env: - CONFIGURE_FLAGS="--with-unixodbc=/usr/local/opt --enable-glib" - YACC="/usr/local/opt/bison/bin/bison" @@ -142,6 +154,7 @@ jobs: - libiodbc - bison - gawk + - gtk-doc env: - CONFIGURE_FLAGS="--with-iodbc=/usr/local/opt --disable-glib" - YACC="/usr/local/opt/bison/bin/bison" @@ -154,6 +167,7 @@ jobs: - unixodbc - bison - gawk + - gtk-doc env: - CONFIGURE_FLAGS="--with-unixodbc=/usr/local/opt --disable-glib" - YACC="/usr/local/opt/bison/bin/bison" diff --git a/README.md b/README.md index 382d3cd..2a86f87 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ An ODBC driver for use with unixODBC or iODBC driver manager. Allows one to use ## gmdb2 -The Gnome MDB File Viewer and debugger. Still alpha and may be removed before 0.9. +The Gnome MDB File Viewer and debugger. Alpha quality, moved to [mdbtools/gmdb2](https://github.com/mdbtools/gmdb2). # License @@ -122,7 +122,7 @@ brew install mdbtools ## From source ```bash -$ autoreconf -i -f -Wno-portability +$ autoreconf -i -f ``` If you want to build the html version of the docbook documentation, you need to diff --git a/configure.ac b/configure.ac index 2840d6f..80a377c 100644 --- a/configure.ac +++ b/configure.ac @@ -224,25 +224,6 @@ if test "$enable_glib" = "yes"; then fi AM_CONDITIONAL(FAKE_GLIB, test "x$enable_glib" != "xyes") -dnl check for gtk/gnome -PKG_CHECK_MODULES([GNOME], [gtk+-2.0 >= 2.14 libglade-2.0 libgnomeui-2.0], HAVE_GNOME=true, HAVE_GNOME=false) - -GNOME_DOC_INIT -AC_ARG_ENABLE(gmdb2, - AS_HELP_STRING([--disable-gmdb2],[do not build gmdb2]), - [build_gmdb2=$enableval], [build_gmdb2=yes]) - -if test "$build_gmdb2" = "yes" ; then - if test "x$HAVE_GNOME" = "xtrue"; then - AC_SUBST(GNOME_CFLAGS) - AC_SUBST(GNOME_LIBS) - OPTDIRS="$OPTDIRS gmdb2" - fi -else - AC_MSG_NOTICE(gmdb2 disabled) - build_gmdb2=no -fi - AC_SUBST([OPTDIRS]) AC_CONFIG_FILES([src/Makefile]) @@ -262,15 +243,7 @@ fi AC_SUBST(HTML_DIR) -gtk_doc_min_version=1.0 -AC_MSG_CHECKING([gtk-doc version >= $gtk_doc_min_version]) -if pkg-config --atleast-version=$gtk_doc_min_version gtk-doc; then - AC_MSG_RESULT(yes) - GTKDOC=true -else - AC_MSG_RESULT(no) - GTKDOC=false -fi +PKG_CHECK_EXISTS([gtk-doc >= 1.0], [GTKDOC=true], [GTKDOC=false]) dnl Let people disable the gtk-doc stuff. AC_ARG_ENABLE(gtk-doc, AS_HELP_STRING([--enable-gtk-doc], [use gtk-doc to build documentation [default=auto]]), enable_gtk_doc="$enableval", enable_gtk_doc=auto) @@ -284,8 +257,6 @@ if test x$enable_gtk_doc = xauto ; then fi AM_CONDITIONAL(ENABLE_GTK_DOC, test x$enable_gtk_doc = xyes) -AM_CONDITIONAL(HAVE_GNOME_DOC_UTILS, test x$enable_gtk_doc = xyes) -AM_CONDITIONAL(ENABLE_SK, test x$enable_gtk_doc = xyes) ################################################## # Check for txt2man @@ -322,10 +293,6 @@ src/sql/Makefile src/odbc/Makefile src/fuzz/Makefile doc/Makefile -src/gmdb2/Makefile -src/gmdb2/gladefiles/Makefile -src/gmdb2/pixmaps/Makefile -src/gmdb2/help/Makefile mdbtools.spec include/mdbver.h]) AC_OUTPUT @@ -349,8 +316,6 @@ if test x$HAVE_ODBC = xtrue; then summary=${bold_green}enabled; else summary=${b AC_MSG_NOTICE([ ODBC : ${summary}${reset}]) if test x$enable_glib = xyes; then summary=${bold_green}enabled; else summary=${bold_red}disabled; fi AC_MSG_NOTICE([ GLib : ${summary}${reset}]) -if test x$build_gmdb2 = xyes; then summary=${bold_green}enabled; else summary=${bold_red}disabled; fi -AC_MSG_NOTICE([ UI : ${summary}${reset}]) if test x$enable_gtk_doc = xyes; then summary=${bold_green}enabled; else summary=${bold_red}disabled; fi AC_MSG_NOTICE([ Gtk doc : ${summary}${reset}]) if test x$enable_man = xyes; then summary=${bold_green}enabled; else summary=${bold_red}disabled; fi diff --git a/doc/Makefile.am b/doc/Makefile.am index 08f846d..558860f 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -6,8 +6,7 @@ PRODUCT = MDBTools dist_man_MANS = if ENABLE_MAN dist_man_MANS += mdb-tables.1 mdb-ver.1 mdb-export.1 mdb-schema.1 mdb-sql.1 \ - mdb-array.1 mdb-header.1 mdb-hexdump.1 mdb-parsecsv.1 mdb-prop.1 mdb-import.1 \ - gmdb2.1 + mdb-array.1 mdb-header.1 mdb-hexdump.1 mdb-parsecsv.1 mdb-prop.1 mdb-import.1 endif if ENABLE_DOCBOOK dist_man_MANS += install.tgz @@ -15,7 +14,7 @@ endif CLEANFILES = ${dist_man_MANS} install install.tgz EXTRA_DIST = mdb-tables.txt mdb-ver.txt mdb-export.txt mdb-schema.txt mdb-sql.txt \ mdb-array.txt mdb-header.txt mdb-hexdump.txt mdb-parsecsv.txt mdb-prop.txt mdb-import.txt \ - gmdb2.txt faq.html install.sgml + faq.html install.sgml .txt.1: $(TXT2MAN) -t $* -r "$(PRODUCT) $(VERSION)" -s 1 -v "Executable programs or shell commands" $(srcdir)/$< > $@ diff --git a/doc/gmdb2.txt b/doc/gmdb2.txt deleted file mode 100644 index 9c21b0e..0000000 --- a/doc/gmdb2.txt +++ /dev/null @@ -1,30 +0,0 @@ -NAME - gmdb2 - GNOME UI for MDB Tools - -SYNOPSIS - gmdb2 [database] - -DESCRIPTION - gmdb2 is a GNOME UI for MDB Tools. - -ENVIRONMENT - MDB_JET3_CHARSET Defines the charset of the input JET3 (access 97) file. Default is CP1252. See iconv(1). - MDBICONV Defines the output charset. Default is UTF-8. mdbtools must have been compiled with iconv. - MDBOPTS semi-column separated list of options: - * use_index - * no_memo - * debug_like - * debug_write - * debug_usage - * debug_ole - * debug_row - * debug_props - * debug_all is a shortcut for all debug_* options - -SEE ALSO - mdb-export(1) mdb-hexdump(1) mdb-prop(1) mdb-sql(1) mdb-ver(1) mdb-array(1) - mdb-header(1) mdb-parsecsv(1) mdb-schema(1) mdb-tables(1) mdb-import(1) - - -AUTHORS - The gmdb2 utility was written by Brian Bruns. diff --git a/doc/mdb-array.txt b/doc/mdb-array.txt index bbf48aa..e48db80 100644 --- a/doc/mdb-array.txt +++ b/doc/mdb-array.txt @@ -25,8 +25,8 @@ ENVIRONMENT * debug_all is a shortcut for all debug_* options SEE ALSO - gmdb2(1) mdb-export(1) mdb-hexdump(1) mdb-prop(1) mdb-sql(1) mdb-ver(1) - mdb-header(1) mdb-parsecsv(1) mdb-schema(1) mdb-tables(1) mdb-import(1) + mdb-export(1) mdb-hexdump(1) mdb-prop(1) mdb-sql(1) mdb-ver(1) mdb-header(1) + mdb-parsecsv(1) mdb-schema(1) mdb-tables(1) mdb-import(1) AUTHORS The mdb-array utility was written by Brian Bruns. diff --git a/doc/mdb-export.txt b/doc/mdb-export.txt index 166e4cd..dd5de0c 100644 --- a/doc/mdb-export.txt +++ b/doc/mdb-export.txt @@ -39,8 +39,8 @@ ENVIRONMENT * debug_all is a shortcut for all debug_* options SEE ALSO - gmdb2(1) mdb-hexdump(1) mdb-prop(1) mdb-sql(1) mdb-ver(1) mdb-array(1) - mdb-header(1) mdb-parsecsv(1) mdb-schema(1) mdb-tables(1) mdb-import(1) + mdb-hexdump(1) mdb-prop(1) mdb-sql(1) mdb-ver(1) mdb-array(1) mdb-header(1) + mdb-parsecsv(1) mdb-schema(1) mdb-tables(1) mdb-import(1) HISTORY mdb-export first appeared in MDB Tools 0.1. diff --git a/doc/mdb-header.txt b/doc/mdb-header.txt index 0960d49..9aa3e68 100644 --- a/doc/mdb-header.txt +++ b/doc/mdb-header.txt @@ -30,8 +30,8 @@ EXIT STATUS mdb-header exits with error code 1 if there was anunsupported type. SEE ALSO - gmdb2(1) mdb-export(1) mdb-hexdump(1) mdb-prop(1) mdb-sql(1) mdb-ver(1) - mdb-array(1) mdb-parsecsv(1) mdb-schema(1) mdb-tables(1) mdb-import(1) + mdb-export(1) mdb-hexdump(1) mdb-prop(1) mdb-sql(1) mdb-ver(1) mdb-array(1) + mdb-parsecsv(1) mdb-schema(1) mdb-tables(1) mdb-import(1) AUTHORS The mdb-header utility was written by Brian Bruns. diff --git a/doc/mdb-hexdump.txt b/doc/mdb-hexdump.txt index ecca1d1..682af5a 100644 --- a/doc/mdb-hexdump.txt +++ b/doc/mdb-hexdump.txt @@ -24,8 +24,8 @@ ENVIRONMENT * debug_all is a shortcut for all debug_* options SEE ALSO - gmdb2(1) mdb-export(1) mdb-prop(1) mdb-sql(1) mdb-ver(1) mdb-array(1) - mdb-header(1) mdb-parsecsv(1) mdb-schema(1) mdb-tables(1) mdb-import(1) + mdb-export(1) mdb-prop(1) mdb-sql(1) mdb-ver(1) mdb-array(1) mdb-header(1) + mdb-parsecsv(1) mdb-schema(1) mdb-tables(1) mdb-import(1) AUTHORS The mdb-hexdump utility was written by Brian Bruns. diff --git a/doc/mdb-import.txt b/doc/mdb-import.txt index e8aae5d..26385d9 100644 --- a/doc/mdb-import.txt +++ b/doc/mdb-import.txt @@ -31,7 +31,7 @@ ENVIRONMENT * debug_all is a shortcut for all debug_* options SEE ALSO - gmdb2(1) mdb-export(1) mdb-hexdump(1) mdb-prop(1) mdb-sql(1) mdb-ver(1) mdb-array(1) + mdb-export(1) mdb-hexdump(1) mdb-prop(1) mdb-sql(1) mdb-ver(1) mdb-array(1) mdb-header(1) mdb-parsecsv(1) mdb-schema(1) mdb-tables(1) HISTORY diff --git a/doc/mdb-parsecsv.txt b/doc/mdb-parsecsv.txt index 8587723..b21fb20 100644 --- a/doc/mdb-parsecsv.txt +++ b/doc/mdb-parsecsv.txt @@ -32,8 +32,8 @@ ENVIRONMENT * debug_all is a shortcut for all debug_* options SEE ALSO - gmdb2(1) mdb-export(1) mdb-hexdump(1) mdb-prop(1) mdb-sql(1) mdb-ver(1) - mdb-array(1) mdb-header(1) mdb-schema(1) mdb-tables(1) mdb-import(1) + mdb-export(1) mdb-hexdump(1) mdb-prop(1) mdb-sql(1) mdb-ver(1) mdb-array(1) + mdb-header(1) mdb-schema(1) mdb-tables(1) mdb-import(1) AUTHORS The mdb-parsecsv utility was written by Brian Bruns. diff --git a/doc/mdb-prop.txt b/doc/mdb-prop.txt index 2dca7ec..2f0c46f 100644 --- a/doc/mdb-prop.txt +++ b/doc/mdb-prop.txt @@ -28,8 +28,8 @@ ENVIRONMENT * debug_all is a shortcut for all debug_* options SEE ALSO - gmdb2(1) mdb-export(1) mdb-hexdump(1) mdb-sql(1) mdb-ver(1) mdb-array(1) - mdb-header(1) mdb-parsecsv(1) mdb-schema(1) mdb-tables(1) mdb-import(1) + mdb-export(1) mdb-hexdump(1) mdb-sql(1) mdb-ver(1) mdb-array(1) mdb-header(1) + mdb-parsecsv(1) mdb-schema(1) mdb-tables(1) mdb-import(1) AUTHORS The mdb-prop utility was written by Brian Bruns. diff --git a/doc/mdb-schema.txt b/doc/mdb-schema.txt index a285954..28ccfa1 100644 --- a/doc/mdb-schema.txt +++ b/doc/mdb-schema.txt @@ -50,8 +50,8 @@ HISTORY mdb-schema first appeared in MDB Tools 0.1. SEE ALSO - gmdb2(1) mdb-export(1) mdb-hexdump(1) mdb-prop(1) mdb-sql(1) mdb-ver(1) - mdb-array(1) mdb-header(1) mdb-parsecsv(1) mdb-tables(1) mdb-import(1) + mdb-export(1) mdb-hexdump(1) mdb-prop(1) mdb-sql(1) mdb-ver(1) mdb-array(1) + mdb-header(1) mdb-parsecsv(1) mdb-tables(1) mdb-import(1) AUTHORS The mdb-schema utility was written by Brian Bruns and others. diff --git a/doc/mdb-sql.txt b/doc/mdb-sql.txt index 72fd48e..8ce5ce8 100644 --- a/doc/mdb-sql.txt +++ b/doc/mdb-sql.txt @@ -75,8 +75,9 @@ HISTORY mdb-sql first appeared in MDB Tools 0.3. SEE ALSO - gmdb2(1) mdb-export(1) mdb-hexdump(1) mdb-import(1) mdb-prop(1) mdb-ver(1) - mdb-array(1) mdb-header(1) mdb-parsecsv(1) mdb-schema(1) mdb-tables(1) isql(1) + mdb-export(1) mdb-hexdump(1) mdb-import(1) mdb-prop(1) mdb-ver(1) + mdb-array(1) mdb-header(1) mdb-parsecsv(1) mdb-schema(1) mdb-tables(1) + isql(1) AUTHORS The mdb-sql utility was written by Brian Bruns. diff --git a/doc/mdb-tables.txt b/doc/mdb-tables.txt index 9d181f8..b5cb299 100644 --- a/doc/mdb-tables.txt +++ b/doc/mdb-tables.txt @@ -37,7 +37,7 @@ HISTORY mdb-tables first appeared in MDB Tools 0.3. SEE ALSO - gmdb2(1) mdb-export(1) mdb-hexdump(1) mdb-import(1) mdb-prop(1) mdb-sql(1) mdb-ver(1) + mdb-export(1) mdb-hexdump(1) mdb-import(1) mdb-prop(1) mdb-sql(1) mdb-ver(1) mdb-array(1) mdb-header(1) mdb-parsecsv(1) mdb-schema(1) AUTHORS diff --git a/doc/mdb-ver.txt b/doc/mdb-ver.txt index d0c3137..0415c7b 100644 --- a/doc/mdb-ver.txt +++ b/doc/mdb-ver.txt @@ -36,7 +36,7 @@ HISTORY mdb-ver first appeared in MDB Tools 0.4. SEE ALSO - gmdb2(1) mdb-export(1) mdb-hexdump(1) mdb-import(1) mdb-prop(1) mdb-sql(1) + mdb-export(1) mdb-hexdump(1) mdb-import(1) mdb-prop(1) mdb-sql(1) mdb-array(1) mdb-header(1) mdb-parsecsv(1) mdb-schema(1) mdb-tables(1) AUTHORS diff --git a/gnome-doc-utils.make b/gnome-doc-utils.make deleted file mode 100644 index 726c5b8..0000000 --- a/gnome-doc-utils.make +++ /dev/null @@ -1,706 +0,0 @@ -# gnome-doc-utils.make - make magic for building documentation -# Copyright (C) 2004-2005 Shaun McCance -# -# 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 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -################################################################################ -## @@ Generating Header Files - -## @ DOC_H_FILE -## The name of the header file to generate -DOC_H_FILE ?= - -## @ DOC_H_DOCS -## The input DocBook files for generating the header file -DOC_H_DOCS ?= - -$(DOC_H_FILE): $(DOC_H_DOCS); - @rm -f $@.tmp; touch $@.tmp; - echo 'const gchar* documentation_credits[] = {' >> $@.tmp - list='$(DOC_H_DOCS)'; for doc in $$list; do \ - xmlpath="`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`:$(srcdir)/`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`"; \ - if ! test -f "$$doc"; then doc="$(srcdir)/$$doc"; fi; \ - xsltproc --path "$$xmlpath" $(_credits) $$doc; \ - done | sort | uniq \ - | awk 'BEGIN{s=""}{n=split($$0,w,"<");if(s!=""&&s!=substr(w[1],1,length(w[1])-1)){print s};if(n>1){print $$0;s=""}else{s=$$0}};END{if(s!=""){print s}}' \ - | sed -e 's/\\/\\\\/' -e 's/"/\\"/' -e 's/\(.*\)/\t"\1",/' >> $@.tmp - echo ' NULL' >> $@.tmp - echo '};' >> $@.tmp - echo >> $@.tmp - list='$(DOC_H_DOCS)'; for doc in $$list; do \ - xmlpath="`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`:$(srcdir)/`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`"; \ - if ! test -f "$$doc"; then doc="$(srcdir)/$$doc"; fi; \ - docid=`echo "$$doc" | sed -e 's/.*\/\([^/]*\)\.xml/\1/' \ - | sed -e 's/[^a-zA-Z_]/_/g' | tr 'a-z' 'A-Z'`; \ - echo $$xmlpath; \ - ids=`xsltproc --xinclude --path "$$xmlpath" $(_ids) $$doc`; \ - for id in $$ids; do \ - echo '#define HELP_'`echo $$docid`'_'`echo $$id \ - | sed -e 's/[^a-zA-Z_]/_/g' | tr 'a-z' 'A-Z'`' "'$$id'"' >> $@.tmp; \ - done; \ - echo >> $@.tmp; \ - done; - cp $@.tmp $@ && rm -f $@.tmp - -dist-check-gdu: -if !HAVE_GNOME_DOC_UTILS - @echo "*** GNOME Doc Utils must be installed in order to make dist" - @false -endif - -.PHONY: dist-doc-header -dist-doc-header: $(DOC_H_FILE) - @if test -f "$(DOC_H_FILE)"; then d=; else d="$(srcdir)/"; fi; \ - echo "$(INSTALL_DATA) $${d}$(DOC_H_FILE) $(distdir)/$(DOC_H_FILE)"; \ - $(INSTALL_DATA) "$${d}$(DOC_H_FILE)" "$(distdir)/$(DOC_H_FILE)"; - -doc-dist-hook: dist-check-gdu $(if $(DOC_H_FILE),dist-doc-header) - -.PHONY: clean-doc-header -_clean_doc_header = $(if $(DOC_H_FILE),clean-doc-header) -clean-local: $(_clean_doc_header) -distclean-local: $(_clean_doc_header) -mostlyclean-local: $(_clean_doc_header) -maintainer-clean-local: $(_clean_doc_header) -clean-doc-header: - rm -f $(DOC_H_FILE) - -all: $(DOC_H_FILE) - - -################################################################################ -## @@ Generating Documentation Files - -## @ DOC_MODULE -## The name of the document being built -DOC_MODULE ?= - -## @ DOC_ID -## The unique identifier for a Mallard document -DOC_ID ?= - -## @ DOC_PAGES -## Page files in a Mallard document -DOC_PAGES ?= - -## @ DOC_ENTITIES -## Files included with a SYSTEM entity -DOC_ENTITIES ?= - -## @ DOC_INCLUDES -## Files included with XInclude -DOC_INCLUDES ?= - -## @ DOC_FIGURES -## Figures and other external data -DOC_FIGURES ?= - -## @ DOC_FORMATS -## The default formats to be built and installed -DOC_FORMATS ?= docbook -_DOC_REAL_FORMATS = $(if $(DOC_USER_FORMATS),$(DOC_USER_FORMATS),$(DOC_FORMATS)) - -## @ DOC_LINGUAS -## The languages this document is translated into -DOC_LINGUAS ?= -_DOC_REAL_LINGUAS = $(if $(filter environment,$(origin LINGUAS)), \ - $(filter $(LINGUAS),$(DOC_LINGUAS)), \ - $(DOC_LINGUAS)) - -_DOC_ABS_SRCDIR = @abs_srcdir@ - - -################################################################################ -## Variables for Bootstrapping - -_xml2po ?= `which xml2po` -_xml2po_mode = $(if $(DOC_ID),mallard,docbook) - -_db2html ?= `$(PKG_CONFIG) --variable db2html gnome-doc-utils` -_db2omf ?= `$(PKG_CONFIG) --variable db2omf gnome-doc-utils` -_chunks ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/chunks.xsl -_credits ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/credits.xsl -_ids ?= $(shell $(PKG_CONFIG) --variable xmldir gnome-doc-utils)/gnome/xslt/docbook/utils/ids.xsl - -if ENABLE_SK -_ENABLE_SK = true -_skpkgdatadir ?= `scrollkeeper-config --pkgdatadir` -_sklocalstatedir ?= `scrollkeeper-config --pkglocalstatedir` -_skcontentslist ?= $(_skpkgdatadir)/Templates/C/scrollkeeper_cl.xml -endif - - -################################################################################ -## Support for automake silent-rules -GDU_V_XML2PO=$(GDU__v_XML2PO_$(V)) -GDU__v_XML2PO_=$(GDU__v_XML2PO_$(AM_DEFAULT_VERBOSITY)) -GDU__v_XML2PO_0=@echo " XML2PO" $@; - -GDU_V_MSGFMT=$(GDU__v_MSGFMT_$(V)) -GDU__v_MSGFMT_=$(GDU__v_MSGFMT_$(AM_DEFAULT_VERBOSITY)) -GDU__v_MSGFMT_0=@echo " MSGFMT" $@; - -GDU_V_DB2OMF=$(GDU__v_DB2OMF_$(V)) -GDU__v_DB2OMF_=$(GDU__v_DB2OMF_$(AM_DEFAULT_VERBOSITY)) -GDU__v_DB2OMF_0=@echo " DB2OMF" $@; - -GDU_V_DB2HTM=$(GDU__v_DB2HTM_$(V)) -GDU__v_DB2HTM_=$(GDU__v_DB2HTM_$(AM_DEFAULT_VERBOSITY)) -GDU__v_DB2HTM_0=@echo " DB2HTM" $@; - -################################################################################ -## @@ Rules for OMF Files - -db2omf_args = \ - --stringparam db2omf.basename $(DOC_MODULE) \ - --stringparam db2omf.format $(3) \ - --stringparam db2omf.dtd \ - $(shell xmllint --format $(2) | grep -h PUBLIC | head -n 1 \ - | sed -e 's/.*PUBLIC \(\"[^\"]*\"\).*/\1/') \ - --stringparam db2omf.lang $(notdir $(patsubst %/$(notdir $(2)),%,$(2))) \ - --stringparam db2omf.omf_dir "$(OMF_DIR)" \ - --stringparam db2omf.help_dir "$(HELP_DIR)" \ - --stringparam db2omf.omf_in "$(_DOC_OMF_IN)" \ - $(if $(_ENABLE_SK), \ - --stringparam db2omf.scrollkeeper_cl "$(_skcontentslist)") \ - $(_db2omf) $(2) - -## @ _DOC_OMF_IN -## The OMF input file -_DOC_OMF_IN = $(if $(DOC_MODULE),$(wildcard $(_DOC_ABS_SRCDIR)/$(DOC_MODULE).omf.in)) - -## @ _DOC_OMF_DB -## The OMF files for DocBook output -_DOC_OMF_DB = $(if $(_DOC_OMF_IN), \ - $(foreach lc,C $(_DOC_REAL_LINGUAS),$(DOC_MODULE)-$(lc).omf)) - -$(_DOC_OMF_DB) : $(_DOC_OMF_IN) -$(_DOC_OMF_DB) : $(DOC_MODULE)-%.omf : %/$(DOC_MODULE).xml - @test "x$(_ENABLE_SK)" != "xtrue" -o -f "$(_skcontentslist)" || { \ - echo "The file '$(_skcontentslist)' does not exist." >&2; \ - echo "Please check your ScrollKeeper installation." >&2; \ - exit 1; } - $(GDU_V_DB2OMF)xsltproc -o $@ $(call db2omf_args,$@,$<,'docbook') || { rm -f "$@"; exit 1; } - -## @ _DOC_OMF_HTML -## The OMF files for HTML output -_DOC_OMF_HTML = $(if $(_DOC_OMF_IN), \ - $(foreach lc,C $(_DOC_REAL_LINGUAS),$(DOC_MODULE)-html-$(lc).omf)) - -$(_DOC_OMF_HTML) : $(_DOC_OMF_IN) -$(_DOC_OMF_HTML) : $(DOC_MODULE)-html-%.omf : %/$(DOC_MODULE).xml -if ENABLE_SK - @test "x$(_ENABLE_SK)" != "xtrue" -o -f "$(_skcontentslist)" || { \ - echo "The file '$(_skcontentslist)' does not exist" >&2; \ - echo "Please check your ScrollKeeper installation." >&2; \ - exit 1; } -endif - $(GDU_V_DB2OMF)xsltproc -o $@ $(call db2omf_args,$@,$<,'xhtml') || { rm -f "$@"; exit 1; } - -## @ _DOC_OMF_ALL -## All OMF output files to be built -# FIXME -_DOC_OMF_ALL = \ - $(if $(filter docbook,$(_DOC_REAL_FORMATS)),$(_DOC_OMF_DB)) \ - $(if $(filter html HTML,$(_DOC_REAL_FORMATS)),$(_DOC_OMF_HTML)) - -.PHONY: omf -omf: $(_DOC_OMF_ALL) - - -################################################################################ -## @@ C Locale Documents - -## @ _DOC_C_MODULE -## The top-level documentation file in the C locale -_DOC_C_MODULE = $(if $(DOC_MODULE),C/$(DOC_MODULE).xml) - -## @ _DOC_C_PAGES -## Page files in a Mallard document in the C locale -_DOC_C_PAGES = $(foreach page,$(DOC_PAGES),C/$(page)) - -## @ _DOC_C_ENTITIES -## Files included with a SYSTEM entity in the C locale -_DOC_C_ENTITIES = $(foreach ent,$(DOC_ENTITIES),C/$(ent)) - -## @ _DOC_C_XINCLUDES -## Files included with XInclude in the C locale -_DOC_C_INCLUDES = $(foreach inc,$(DOC_INCLUDES),C/$(inc)) - -## @ _DOC_C_DOCS -## All documentation files in the C locale -_DOC_C_DOCS = \ - $(_DOC_C_ENTITIES) $(_DOC_C_INCLUDES) \ - $(_DOC_C_PAGES) $(_DOC_C_MODULE) - -## @ _DOC_C_DOCS_NOENT -## All documentation files in the C locale, -## except files included with a SYSTEM entity -_DOC_C_DOCS_NOENT = \ - $(_DOC_C_MODULE) $(_DOC_C_INCLUDES) \ - $(_DOC_C_PAGES) - -## @ _DOC_C_FIGURES -## All figures and other external data in the C locale -_DOC_C_FIGURES = $(if $(DOC_FIGURES), \ - $(foreach fig,$(DOC_FIGURES),C/$(fig)), \ - $(patsubst $(srcdir)/%,%,$(wildcard $(srcdir)/C/figures/*.png))) - -## @ _DOC_C_HTML -## All HTML documentation in the C locale -# FIXME: probably have to shell escape to determine the file names -_DOC_C_HTML = $(foreach f, \ - $(shell xsltproc --xinclude \ - --stringparam db.chunk.basename "$(DOC_MODULE)" \ - $(_chunks) "C/$(DOC_MODULE).xml"), \ - C/$(f).xhtml) - -############################################################################### -## @@ Other Locale Documentation - -## @ _DOC_POFILES -## The .po files used for translating the document -_DOC_POFILES = $(if $(DOC_MODULE)$(DOC_ID), \ - $(foreach lc,$(_DOC_REAL_LINGUAS),$(lc)/$(lc).po)) - -.PHONY: po -po: $(_DOC_POFILES) - -## @ _DOC_MOFILES -## The .mo files used for translating the document -_DOC_MOFILES = $(patsubst %.po,%.mo,$(_DOC_POFILES)) - -.PHONY: mo -mo: $(_DOC_MOFILES) - -## @ _DOC_LC_MODULES -## The top-level documentation files in all other locales -_DOC_LC_MODULES = $(if $(DOC_MODULE), \ - $(foreach lc,$(_DOC_REAL_LINGUAS),$(lc)/$(DOC_MODULE).xml)) - -## @ _DOC_LC_PAGES -## Page files in a Mallard document in all other locales -_DOC_LC_PAGES = \ - $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach page,$(_DOC_C_PAGES), \ - $(lc)/$(notdir $(page)) )) - -## @ _DOC_LC_XINCLUDES -## Files included with XInclude in all other locales -_DOC_LC_INCLUDES = \ - $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach inc,$(_DOC_C_INCLUDES), \ - $(lc)/$(notdir $(inc)) )) - -## @ _DOC_LC_HTML -## All HTML documentation in all other locales -# FIXME: probably have to shell escape to determine the file names -_DOC_LC_HTML = \ - $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach doc,$(_DOC_C_HTML), \ - $(lc)/$(notdir $(doc)) )) - -## @ _DOC_LC_DOCS -## All documentation files in all other locales -_DOC_LC_DOCS = \ - $(_DOC_LC_MODULES) $(_DOC_LC_INCLUDES) $(_DOC_LC_PAGES) \ - $(if $(filter html HTML,$(_DOC_REAL_FORMATS)),$(_DOC_LC_HTML)) - -## @ _DOC_LC_FIGURES -## All figures and other external data in all other locales -_DOC_LC_FIGURES = $(foreach lc,$(_DOC_REAL_LINGUAS), \ - $(patsubst C/%,$(lc)/%,$(_DOC_C_FIGURES)) ) - -_DOC_SRC_FIGURES = \ - $(foreach fig,$(_DOC_C_FIGURES), $(foreach lc,C $(_DOC_REAL_LINGUAS), \ - $(wildcard $(srcdir)/$(lc)/$(patsubst C/%,%,$(fig))) )) - -$(_DOC_POFILES): - @if ! test -d $(dir $@); then \ - echo "mkdir $(dir $@)"; \ - mkdir "$(dir $@)"; \ - fi - @if test ! -f $@ -a -f $(srcdir)/$@; then \ - echo "cp $(srcdir)/$@ $@"; \ - cp "$(srcdir)/$@" "$@"; \ - fi; - @docs=; \ - list='$(_DOC_C_DOCS_NOENT)'; for doc in $$list; do \ - docs="$$docs $(_DOC_ABS_SRCDIR)/$$doc"; \ - done; \ - if ! test -f $@; then \ - echo "(cd $(dir $@) && \ - $(_xml2po) -m $(_xml2po_mode) -e $$docs > $(notdir $@).tmp && \ - cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp)"; \ - (cd $(dir $@) && \ - $(_xml2po) -m $(_xml2po_mode) -e $$docs > $(notdir $@).tmp && \ - cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp); \ - else \ - echo "(cd $(dir $@) && \ - $(_xml2po) -m $(_xml2po_mode) -e -u $(notdir $@) $$docs)"; \ - (cd $(dir $@) && \ - $(_xml2po) -m $(_xml2po_mode) -e -u $(notdir $@) $$docs); \ - fi - -$(_DOC_MOFILES): %.mo: %.po - $(AM_V_at)if ! test -d $(dir $@); then mkdir "$(dir $@)"; fi - $(GDU_V_MSGFMT)msgfmt -o $@ $< - -# FIXME: fix the dependancy -# FIXME: hook xml2po up -$(_DOC_LC_DOCS) : $(_DOC_MOFILES) -$(_DOC_LC_DOCS) : $(_DOC_C_DOCS) - $(AM_V_at)if ! test -d $(dir $@); then mkdir $(dir $@); fi - $(GDU_V_XML2PO)if [ -f "C/$(notdir $@)" ]; then d="../"; else d="$(_DOC_ABS_SRCDIR)/"; fi; \ - mo="$(dir $@)$(patsubst %/$(notdir $@),%,$@).mo"; \ - if [ -f "$${mo}" ]; then mo="../$${mo}"; else mo="$(_DOC_ABS_SRCDIR)/$${mo}"; fi; \ - (cd $(dir $@) && \ - $(_xml2po) -m $(_xml2po_mode) -e -t "$${mo}" \ - "$${d}C/$(notdir $@)" > $(notdir $@).tmp && \ - cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp) - -## @ _DOC_POT -## A pot file -_DOC_POT = $(if $(DOC_MODULE),$(DOC_MODULE).pot,$(if $(DOC_ID),$(DOC_ID).pot)) -.PHONY: pot -pot: $(_DOC_POT) -$(_DOC_POT): $(_DOC_C_DOCS_NOENT) - $(GDU_V_XML2PO)$(_xml2po) -m $(_xml2po_mode) -e -o $@ $^ - - -################################################################################ -## @@ All Documentation - -## @ _DOC_HTML_ALL -## All HTML documentation, only if it's built -_DOC_HTML_ALL = $(if $(filter html HTML,$(_DOC_REAL_FORMATS)), \ - $(_DOC_C_HTML) $(_DOC_LC_HTML)) - -_DOC_HTML_TOPS = $(foreach lc,C $(_DOC_REAL_LINGUAS),$(lc)/$(DOC_MODULE).xhtml) - -$(_DOC_HTML_TOPS): $(_DOC_C_DOCS) $(_DOC_LC_DOCS) - $(GDU_V_DB2HTM)xsltproc -o $@ --xinclude --param db.chunk.chunk_top "false()" --stringparam db.chunk.basename "$(DOC_MODULE)" --stringparam db.chunk.extension ".xhtml" $(_db2html) $(patsubst %.xhtml,%.xml,$@) - - -################################################################################ -## All - -all: \ - $(_DOC_C_DOCS) $(_DOC_LC_DOCS) \ - $(_DOC_OMF_ALL) $(_DOC_DSK_ALL) \ - $(_DOC_HTML_ALL) $(_DOC_POFILES) - - -################################################################################ -## Clean - -.PHONY: clean-doc-omf clean-doc-dsk clean-doc-lc clean-doc-dir - -clean-doc-omf: ; rm -f $(_DOC_OMF_DB) $(_DOC_OMF_HTML) -clean-doc-dsk: ; rm -f $(_DOC_DSK_DB) $(_DOC_DSK_HTML) -clean-doc-lc: - rm -f $(_DOC_LC_DOCS) - rm -f $(_DOC_MOFILES) - @list='$(_DOC_POFILES)'; for po in $$list; do \ - if ! test "$$po" -ef "$(srcdir)/$$po"; then \ - echo "rm -f $$po"; \ - rm -f "$$po"; \ - fi; \ - done -# .xml2.po.mo cleaning is obsolete as of 0.18.1 and could be removed in 0.20.x - @for lc in C $(_DOC_REAL_LINGUAS); do \ - if test -f "$$lc/.xml2po.mo"; then \ - echo "rm -f $$lc/.xml2po.mo"; \ - rm -f "$$lc/.xml2po.mo"; \ - fi; \ - done -clean-doc-dir: clean-doc-lc - @for lc in C $(_DOC_REAL_LINGUAS); do \ - for dir in `find $$lc -depth -type d`; do \ - if ! test $$dir -ef $(srcdir)/$$dir; then \ - echo "rmdir $$dir"; \ - rmdir "$$dir"; \ - fi; \ - done; \ - done - -_clean_omf = $(if $(_DOC_OMF_IN),clean-doc-omf) -_clean_dsk = $(if $(_DOC_DSK_IN),clean-doc-dsk) -_clean_lc = $(if $(_DOC_REAL_LINGUAS),clean-doc-lc) -_clean_dir = $(if $(DOC_MODULE)$(DOC_ID),clean-doc-dir) - -clean-local: \ - $(_clean_omf) $(_clean_dsk) \ - $(_clean_lc) $(_clean_dir) -distclean-local: \ - $(_clean_omf) $(_clean_dsk) \ - $(_clean_lc) $(_clean_dir) -mostlyclean-local: \ - $(_clean_omf) $(_clean_dsk) \ - $(_clean_lc) $(_clean_dir) -maintainer-clean-local: \ - $(_clean_omf) $(_clean_dsk) \ - $(_clean_lc) $(_clean_dir) - - - -################################################################################ -## Dist - -.PHONY: dist-doc-docs dist-doc-pages dist-doc-figs dist-doc-omf dist-doc-dsk -doc-dist-hook: \ - $(if $(DOC_MODULE)$(DOC_ID),dist-doc-docs) \ - $(if $(_DOC_C_FIGURES),dist-doc-figs) \ - $(if $(_DOC_OMF_IN),dist-doc-omf) -# $(if $(_DOC_DSK_IN),dist-doc-dsk) - -dist-doc-docs: $(_DOC_C_DOCS) $(_DOC_LC_DOCS) $(_DOC_POFILES) - @for lc in C $(_DOC_REAL_LINGUAS); do \ - echo " $(mkinstalldirs) $(distdir)/$$lc"; \ - $(mkinstalldirs) "$(distdir)/$$lc"; \ - done - @list='$(_DOC_C_DOCS)'; \ - for doc in $$list; do \ - if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ - docdir=`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ - if ! test -d "$(distdir)/$$docdir"; then \ - echo "$(mkinstalldirs) $(distdir)/$$docdir"; \ - $(mkinstalldirs) "$(distdir)/$$docdir"; \ - fi; \ - echo "$(INSTALL_DATA) $$d$$doc $(distdir)/$$doc"; \ - $(INSTALL_DATA) "$$d$$doc" "$(distdir)/$$doc"; \ - done - @list='$(_DOC_LC_DOCS)'; \ - for doc in $$list; do \ - if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ - docdir=`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ - if ! test -d "$(distdir)/$$docdir"; then \ - echo "$(mkinstalldirs) $(distdir)/$$docdir"; \ - $(mkinstalldirs) "$(distdir)/$$docdir"; \ - fi; \ - echo "$(INSTALL_DATA) $$d$$doc $(distdir)/$$doc"; \ - $(INSTALL_DATA) "$$d$$doc" "$(distdir)/$$doc"; \ - done - @list='$(_DOC_POFILES)'; \ - for doc in $$list; do \ - if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ - docdir=`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ - if ! test -d "$(distdir)/$$docdir"; then \ - echo "$(mkinstalldirs) $(distdir)/$$docdir"; \ - $(mkinstalldirs) "$(distdir)/$$docdir"; \ - fi; \ - echo "$(INSTALL_DATA) $$d$$doc $(distdir)/$$doc"; \ - $(INSTALL_DATA) "$$d$$doc" "$(distdir)/$$doc"; \ - done - -dist-doc-figs: $(_DOC_SRC_FIGURES) - @list='$(_DOC_C_FIGURES) $(_DOC_LC_FIGURES)'; \ - for fig in $$list; do \ - if test -f "$$fig"; then d=; else d="$(srcdir)/"; fi; \ - if test -f "$$d$$fig"; then \ - figdir=`echo $$fig | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ - if ! test -d "$(distdir)/$$figdir"; then \ - echo "$(mkinstalldirs) $(distdir)/$$figdir"; \ - $(mkinstalldirs) "$(distdir)/$$figdir"; \ - fi; \ - echo "$(INSTALL_DATA) $$d$$fig $(distdir)/$$fig"; \ - $(INSTALL_DATA) "$$d$$fig" "$(distdir)/$$fig"; \ - fi; \ - done; - -dist-doc-omf: - @if test -f "$(_DOC_OMF_IN)"; then d=; else d="$(srcdir)/"; fi; \ - echo "$(INSTALL_DATA) $$d$(_DOC_OMF_IN) $(distdir)/$(notdir $(_DOC_OMF_IN))"; \ - $(INSTALL_DATA) "$$d$(_DOC_OMF_IN)" "$(distdir)/$(notdir $(_DOC_OMF_IN))" - -dist-doc-dsk: - @if test -f "$(_DOC_DSK_IN)"; then d=; else d="$(srcdir)/"; fi; \ - echo "$(INSTALL_DATA) $$d$(_DOC_DSK_IN) $(distdir)/$(notdir $(_DOC_DSK_IN))"; \ - $(INSTALL_DATA) "$$d$(_DOC_DSK_IN)" "$(distdir)/$(notdir $(_DOC_DSK_IN))" - - - -################################################################################ -## Check - -.PHONY: check-doc-docs check-doc-omf -check: \ - $(if $(DOC_MODULE),check-doc-docs) \ - $(if $(DOC_ID),check-doc-pages) \ - $(if $(_DOC_OMF_IN),check-doc-omf) - -check-doc-docs: $(_DOC_C_DOCS) $(_DOC_LC_DOCS) - @for lc in C $(_DOC_REAL_LINGUAS); do \ - if test -f "$$lc"; \ - then d=; \ - xmlpath="$$lc"; \ - else \ - d="$(srcdir)/"; \ - xmlpath="$$lc:$(srcdir)/$$lc"; \ - fi; \ - echo "xmllint --noout --noent --path $$xmlpath --xinclude --postvalid $$d$$lc/$(DOC_MODULE).xml"; \ - xmllint --noout --noent --path "$$xmlpath" --xinclude --postvalid "$$d$$lc/$(DOC_MODULE).xml"; \ - done - -check-doc-pages: $(_DOC_C_PAGES) $(_DOC_LC_PAGES) - for lc in C $(_DOC_REAL_LINGUAS); do \ - if test -f "$$lc"; \ - then d=; \ - xmlpath="$$lc"; \ - else \ - d="$(srcdir)/"; \ - xmlpath="$$lc:$(srcdir)/$$lc"; \ - fi; \ - for page in $(DOC_PAGES); do \ - echo "xmllint --noout --noent --path $$xmlpath --xinclude $$d$$lc/$$page"; \ - xmllint --noout --noent --path "$$xmlpath" --xinclude "$$d$$lc/$$page"; \ - done; \ - done - -check-doc-omf: $(_DOC_OMF_ALL) - @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \ - echo "xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' $$omf"; \ - xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' $$omf; \ - done - - - -################################################################################ -## Install - -.PHONY: install-doc-docs install-doc-html install-doc-figs install-doc-omf install-doc-dsk - -_doc_install_dir = $(if $(DOC_ID),$(DOC_ID),$(DOC_MODULE)) - -install-data-local: \ - $(if $(DOC_MODULE)$(DOC_ID),install-doc-docs) \ - $(if $(_DOC_HTML_ALL),install-doc-html) \ - $(if $(_DOC_C_FIGURES),install-doc-figs) \ - $(if $(_DOC_OMF_IN),install-doc-omf) -# $(if $(_DOC_DSK_IN),install-doc-dsk) - -install-doc-docs: - @for lc in C $(_DOC_REAL_LINGUAS); do \ - echo "$(mkinstalldirs) $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$lc"; \ - $(mkinstalldirs) $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$lc; \ - done - @list='$(_DOC_C_DOCS)'; for doc in $$list; do \ - if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ - docdir="$$lc/"`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ - docdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$docdir"; \ - if ! test -d "$$docdir"; then \ - echo "$(mkinstalldirs) $$docdir"; \ - $(mkinstalldirs) "$$docdir"; \ - fi; \ - echo "$(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ - $(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc; \ - done - @list='$(_DOC_LC_DOCS)'; for doc in $$list; do \ - if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ - docdir="$$lc/"`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ - docdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$docdir"; \ - if ! test -d "$$docdir"; then \ - echo "$(mkinstalldirs) $$docdir"; \ - $(mkinstalldirs) "$$docdir"; \ - fi; \ - echo "$(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ - $(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc; \ - done - -install-doc-figs: - @list='$(patsubst C/%,%,$(_DOC_C_FIGURES))'; for fig in $$list; do \ - for lc in C $(_DOC_REAL_LINGUAS); do \ - figsymlink=false; \ - if test -f "$$lc/$$fig"; then \ - figfile="$$lc/$$fig"; \ - elif test -f "$(srcdir)/$$lc/$$fig"; then \ - figfile="$(srcdir)/$$lc/$$fig"; \ - else \ - figsymlink=true; \ - fi; \ - figdir="$$lc/"`echo $$fig | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ - figdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$figdir"; \ - if ! test -d "$$figdir"; then \ - echo "$(mkinstalldirs) $$figdir"; \ - $(mkinstalldirs) "$$figdir"; \ - fi; \ - figbase=`echo $$fig | sed -e 's/^.*\///'`; \ - if $$figsymlink; then \ - echo "cd $$figdir && $(LN_S) -f ../../C/$$fig $$figbase"; \ - ( cd "$$figdir" && $(LN_S) -f "../../C/$$fig" "$$figbase" ); \ - else \ - echo "$(INSTALL_DATA) $$figfile $$figdir$$figbase"; \ - $(INSTALL_DATA) "$$figfile" "$$figdir$$figbase"; \ - fi; \ - done; \ - done - -install-doc-html: - echo install-html - -install-doc-omf: - $(mkinstalldirs) $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir) - @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \ - echo "$(INSTALL_DATA) $$omf $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ - $(INSTALL_DATA) $$omf $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf; \ - done - @if test "x$(_ENABLE_SK)" = "xtrue"; then \ - echo "scrollkeeper-update -p $(DESTDIR)$(_sklocalstatedir) -o $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)"; \ - scrollkeeper-update -p "$(DESTDIR)$(_sklocalstatedir)" -o "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)"; \ - fi; - -install-doc-dsk: - echo install-dsk - - - -################################################################################ -## Uninstall - -.PHONY: uninstall-doc-docs uninstall-doc-html uninstall-doc-figs uninstall-doc-omf uninstall-doc-dsk -uninstall-local: \ - $(if $(DOC_MODULE)$(DOC_ID),uninstall-doc-docs) \ - $(if $(_DOC_HTML_ALL),uninstall-doc-html) \ - $(if $(_DOC_C_FIGURES),uninstall-doc-figs) \ - $(if $(_DOC_OMF_IN),uninstall-doc-omf) -# $(if $(_DOC_DSK_IN),uninstall-doc-dsk) - -uninstall-doc-docs: - @list='$(_DOC_C_DOCS)'; for doc in $$list; do \ - echo " rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ - rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ - done - @list='$(_DOC_LC_DOCS)'; for doc in $$list; do \ - echo " rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ - rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ - done - -uninstall-doc-figs: - @list='$(_DOC_C_FIGURES) $(_DOC_LC_FIGURES)'; for fig in $$list; do \ - echo "rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$fig"; \ - rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$fig"; \ - done; - -uninstall-doc-omf: - @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \ - if test "x$(_ENABLE_SK)" = "xtrue"; then \ - echo "scrollkeeper-uninstall -p $(_sklocalstatedir) $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ - scrollkeeper-uninstall -p "$(_sklocalstatedir)" "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ - fi; \ - echo "rm -f $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ - rm -f "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ - done diff --git a/m4/gnome-doc-utils.m4 b/m4/gnome-doc-utils.m4 deleted file mode 100644 index f8d160a..0000000 --- a/m4/gnome-doc-utils.m4 +++ /dev/null @@ -1,61 +0,0 @@ -dnl Do not call GNOME_DOC_DEFINES directly. It is split out from -dnl GNOME_DOC_INIT to allow gnome-doc-utils to bootstrap off itself. -AC_DEFUN([GNOME_DOC_DEFINES], -[ -AC_ARG_WITH([help-dir], - AC_HELP_STRING([--with-help-dir=DIR], [path to help docs]),, - [with_help_dir='${datadir}/gnome/help']) -HELP_DIR="$with_help_dir" -AC_SUBST(HELP_DIR) - -AC_ARG_WITH([omf-dir], - AC_HELP_STRING([--with-omf-dir=DIR], [path to OMF files]),, - [with_omf_dir='${datadir}/omf']) -OMF_DIR="$with_omf_dir" -AC_SUBST(OMF_DIR) - -AC_ARG_WITH([help-formats], - AC_HELP_STRING([--with-help-formats=FORMATS], [list of formats]),, - [with_help_formats='']) -DOC_USER_FORMATS="$with_help_formats" -AC_SUBST(DOC_USER_FORMATS) - -AC_ARG_ENABLE([scrollkeeper], - [AC_HELP_STRING([--disable-scrollkeeper], - [do not make updates to the scrollkeeper database])],, - enable_scrollkeeper=yes) -AM_CONDITIONAL([ENABLE_SK],[test "$gdu_cv_have_gdu" = "yes" -a "$enable_scrollkeeper" = "yes"]) - -dnl disable scrollkeeper automatically for distcheck -DISTCHECK_CONFIGURE_FLAGS="--disable-scrollkeeper $DISTCHECK_CONFIGURE_FLAGS" -AC_SUBST(DISTCHECK_CONFIGURE_FLAGS) - -AM_CONDITIONAL([HAVE_GNOME_DOC_UTILS],[test "$gdu_cv_have_gdu" = "yes"]) -]) - -# GNOME_DOC_INIT ([MINIMUM-VERSION],[ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) -# -AC_DEFUN([GNOME_DOC_INIT], -[AC_REQUIRE([AC_PROG_LN_S])dnl - -if test -z "$AM_DEFAULT_VERBOSITY"; then - AM_DEFAULT_VERBOSITY=1 -fi -AC_SUBST([AM_DEFAULT_VERBOSITY]) - -ifelse([$1],,[gdu_cv_version_required=0.3.2],[gdu_cv_version_required=$1]) - -AC_MSG_CHECKING([gnome-doc-utils >= $gdu_cv_version_required]) -PKG_CHECK_EXISTS([gnome-doc-utils >= $gdu_cv_version_required], - [gdu_cv_have_gdu=yes],[gdu_cv_have_gdu=no]) - -if test "$gdu_cv_have_gdu" = "yes"; then - AC_MSG_RESULT([yes]) - ifelse([$2],,[:],[$2]) -else - AC_MSG_RESULT([no]) - ifelse([$3],,[:],[$3]) -fi - -GNOME_DOC_DEFINES -]) diff --git a/mdbtools.spec.in b/mdbtools.spec.in index 1de7574..0e91dce 100644 --- a/mdbtools.spec.in +++ b/mdbtools.spec.in @@ -4,10 +4,10 @@ Name: %{name} Version: %{version} Release: 1 -Vendor: mdbtools.sourceforge.net -Copyright: LGPL/GPL +Vendor: github.com/mdbtools +License: LGPL/GPL Group: System Environment/Libraries -Source: http://download.sourceforge.net/mdbtools/%{name}-%{version}.tgz +Source: https://github.com/mdbtools/%{name}/archive/%{version}.tar.gz BuildRoot: /var/tmp/%{name}-buildroot Summary: MDB Tools is a suite of libraries and program for accessing data stored in Microsoft Access databases. @@ -31,20 +31,12 @@ Group: System Environment/Libraries Summary: MDB Tools ODBC driver for unixODBC Requires: mdbtools = %{version}, unixODBC >= 2.0.0 -%package gui -Group: Applications/Databases -Summary: gmdb2 graphical interface for MDB Tools -Requires: mdbtools = %{version}, libgnomeui >= 2.0.0, libglade2 >= 2.0.0 - %description devel The mdbtools-devel package contains the files necessary for development with with the MDB Tools libraries. %description odbc The mdbtools-odbc package contains ODBC driver build for unixODBC. -%description gui -The mdbtools-gui package contains the gmdb2 graphical user interface for MDB Tools - %prep %setup @@ -94,13 +86,6 @@ rm -rf $RPM_BUILD_ROOT %{_libdir}/libmdbodbc.a %{_libdir}/libmdbodbc.so* -%files gui -%defattr (-,root,root) -%{_bindir}/gmdb2 -%{_datadir}/gmdb/glade/* -%{_datadir}/gnome/help/gmdb/C/* -%{_datadir}/gnome/help/gmdb/C/figures/* - %changelog * Sat Jan 11 2003 Brian Bruns - Modifications for 0.5 ver and making .in version diff --git a/src/Makefile.am b/src/Makefile.am index c130faf..e4fa141 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,3 +1,3 @@ SUBDIRS = libmdb extras $(OPTDIRS) util -DIST_SUBDIRS = libmdb extras sql odbc gmdb2 util +DIST_SUBDIRS = libmdb extras sql odbc util DEFDIR = $(prefix) diff --git a/src/gmdb2/Makefile.am b/src/gmdb2/Makefile.am deleted file mode 100644 index d41c1ee..0000000 --- a/src/gmdb2/Makefile.am +++ /dev/null @@ -1,17 +0,0 @@ -SUBDIRS = help gladefiles pixmaps -bin_PROGRAMS = gmdb2 -include_HEADERS = gmdb.h - -gmdb2_SOURCES = main2.c file.c table.c info.c table_def.c table_data.c table_export.c debug.c sql.c schema.c prefs.c -LIBS = -rdynamic $(GNOME_LIBS) @LIBS@ -AM_CFLAGS = -I$(top_srcdir)/include $(GNOME_CFLAGS) \ - -DDATADIR="\"$(datadir)\"" \ - -DGMDB_ICONDIR="\"$(datadir)/gmdb/glade/\"" \ - -DGMDB_GLADEDIR="\"$(datadir)/gmdb/glade/\"" - -#LDADD = ../libmdb/libmdb.la -LDADD = ../libmdb/libmdb.la ../sql/libmdbsql.la -#if SQL -#gmdb_LDADD = ../libmdb/libmdb.la ../sql/libmdbsql.la -#endif -EXTRA_DIST = gmdb.desktop gmdb.bash-completion diff --git a/src/gmdb2/debug.c b/src/gmdb2/debug.c deleted file mode 100644 index f8c0bdb..0000000 --- a/src/gmdb2/debug.c +++ /dev/null @@ -1,1089 +0,0 @@ -/* MDB Tools - A library for reading MS Access database file - * Copyright (C) 2000 Brian Bruns - * - * 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 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -/* Objects attached to debug_window: - * GList *nav_list: list of pages viewed, entries are guint32 *'s - * guint *nav_elem: index to current page in nav_list - * GladeXML *debugwin_xml: the associated glade hierarchy - * gboolean *dissect: whether dissecting is turned on - */ - -#include -#include -#include -#include "gmdb.h" - -extern MdbHandle *mdb; - -GList *debug_list = NULL; - -#define LINESZ 77 - -/* prototypes */ -static void gmdb_debug_init(MdbHandle *mdb, GladeXML *xml); -static void gmdb_debug_text_on(GtkWidget *textbox, int start_byte, int end_byte); -static void gmdb_debug_text_off(GtkWidget *textbox); -static GtkTreeIter *gmdb_debug_add_item(GtkTreeStore *store, GtkTreeIter *iter, gchar *text, int start, int len); -static void gmdb_debug_clear(GladeXML *xml); -static void gmdb_debug_dissect(GtkTreeStore *store, char *fbuf, int offset, int len); -static guint16 get_uint16(void *c); -static guint32 get_uint32(void *c); -static long gmdb_get_max_page(MdbHandle *mdb); -static void gmdb_debug_display(GladeXML *xml, guint32 page); -static void gmdb_debug_jump(GladeXML *xml, int msb); - -/* value to string stuff */ -typedef struct GMdbValStr { - gint value; - gchar *string; -} GMdbValStr; - -GMdbValStr table_types[] = { - { 0x4e, "User" }, - { 0x53, "System" }, - { 0, NULL } -}; -GMdbValStr column_types[] = { - { 0x01, "boolean" }, - { 0x02, "byte" }, - { 0x03, "int" }, - { 0x04, "longint" }, - { 0x05, "money" }, - { 0x06, "float" }, - { 0x07, "double" }, - { 0x08, "short datetime" }, - { 0x09, "binary" }, - { 0x0a, "text" }, - { 0x0b, "OLE" }, - { 0x0c, "memo/hyperlink" }, - { 0x0d, "Unknown" }, - { 0x0f, "GUID" }, - { 0, NULL } -}; -GMdbValStr object_types[] = { - { 0x00, "Database Definition" }, - { 0x01, "Data" }, - { 0x02, "Table Definition" }, - { 0x03, "Index" }, - { 0x04, "Leaf Index" }, - { 0, NULL } -}; - -/* callbacks */ -static void -gmdb_debug_select_cb(GtkTreeSelection *select, GladeXML *xml) -{ - int start_row, end_row; - int start_col, end_col; - GtkTreeIter iter; - GtkTreeModel *model; - gint32 start, end, len; - GtkWidget *textview; - gchar *fieldname; - - fprintf(stderr, "select_cb fired\n"); - - textview = glade_xml_get_widget (xml, "debug_textview"); - gmdb_debug_text_off(textview); - - if (!select) - return; - if (!gtk_tree_selection_get_selected (select, &model, &iter)) - return; - - gtk_tree_model_get (model, &iter, 0, &fieldname, - 1, &start, - 2, &len, -1); - g_free (fieldname); - if ((start == -1) || (len < 1)) - return; - - end = start + len - 1; - start_row = LINESZ * (start / 16); - end_row = LINESZ * (end / 16); - start_col = 8 + (start % 16) * 3; - end_col = 8 + (end % 16) * 3; - - if (start_row == end_row) { - gmdb_debug_text_on(textview, - start_row + start_col, - start_row + end_col + 2); - gmdb_debug_text_on(textview, - start_row + 59 + (start % 16), - start_row + 59 + (end % 16) + 1); - } else { - int i; - gmdb_debug_text_on(textview, - start_row + start_col, - /* 55 = 8 (addr) + 15 (bytes) * 3 (%02x " ") + 2 (last byte) */ - start_row + 55); - gmdb_debug_text_on(textview, - start_row + 59 + (start % 16), - start_row + 75); - for (i=start_row + LINESZ; i < end_row; i+=LINESZ) { - gmdb_debug_text_on(textview, i + 8, i + 55); - gmdb_debug_text_on(textview, i + 59, i + 75); - } - gmdb_debug_text_on(textview, - end_row + 8, - end_row + end_col + 2); - gmdb_debug_text_on(textview, - end_row + 59, - end_row + 59 + (end % 16) + 1); - } -} -void -gmdb_debug_forward_cb(GtkWidget *w, gpointer data) -{ - guint *nav_elem; - guint32 *page; - GladeXML *xml; - GList *nav_list; - guint num_items; - - nav_list = g_object_get_data(G_OBJECT(w),"nav_list"); - nav_elem = g_object_get_data(G_OBJECT(w),"nav_elem"); - num_items = g_list_length(nav_list); - if (!nav_elem || *nav_elem == num_items) - return; - (*nav_elem)++; - g_object_set_data(G_OBJECT(w), "nav_elem", nav_elem); - page = g_list_nth_data(nav_list,(*nav_elem) - 1); - - xml = g_object_get_data(G_OBJECT(w), "debugwin_xml"); - gmdb_debug_display(xml, *page); -} -void -gmdb_debug_back_cb(GtkWidget *w, gpointer data) -{ - guint *nav_elem; - guint32 *page; - GladeXML *xml; - GList *nav_list; - - nav_list = g_object_get_data(G_OBJECT(w),"nav_list"); - nav_elem = g_object_get_data(G_OBJECT(w),"nav_elem"); - if (!nav_elem || *nav_elem==1) - return; /* at top of list already */ - (*nav_elem)--; - g_object_set_data(G_OBJECT(w), "nav_elem", nav_elem); - page = g_list_nth_data(nav_list,(*nav_elem) - 1); - - xml = g_object_get_data(G_OBJECT(w), "debugwin_xml"); - gmdb_debug_display(xml, *page); -} -static void -gmdb_nav_add_page(GtkWidget *win, guint32 page_num) -{ - GList *nav_list = NULL; - GList *link = NULL; - guint *nav_elem; - guint num_items; - int i; - - nav_list = g_object_get_data(G_OBJECT(win),"nav_list"); - nav_elem = g_object_get_data(G_OBJECT(win),"nav_elem"); - if (!nav_elem) { - nav_elem = g_malloc0(sizeof(guint)); - } - - /* - * If we are positioned in the middle of the list and jumping from here - * clear the end of the list first. - */ - num_items = g_list_length(nav_list); - if (num_items > *nav_elem) { - for (i=num_items - 1; i >= *nav_elem; i--) { - link = g_list_nth(nav_list,i); - nav_list = g_list_remove_link(nav_list, link); - g_free(link->data); - g_list_free_1(link); - } - } - - nav_list = g_list_append(nav_list, g_memdup(&page_num, 4)); - *nav_elem = g_list_length(nav_list); - - g_object_set_data(G_OBJECT(win), "nav_list", nav_list); - g_object_set_data(G_OBJECT(win), "nav_elem", nav_elem); -} - -void -gmdb_debug_jump_cb(GtkWidget *w, gpointer data) -{ - gmdb_debug_jump(g_object_get_data(G_OBJECT(w), "debugwin_xml"), 0); -} -void -gmdb_debug_jump_msb_cb(GtkWidget *w, gpointer data) -{ - gmdb_debug_jump(g_object_get_data(G_OBJECT(w), "debugwin_xml"), 1); -} -static void -gmdb_debug_jump(GladeXML *xml, int msb) -{ - GtkTextView *textview; - GtkTextBuffer *txtbuffer; - GtkTextIter start, end; - GtkWidget *entry; - gchar *text; - gchar page[12]; - gchar digits[4][3]; - gchar *hex_digit; - int i, num_digits = 0; - - textview = (GtkTextView *) glade_xml_get_widget (xml, "debug_textview"); - txtbuffer = gtk_text_view_get_buffer(textview); - if (!gtk_text_buffer_get_selection_bounds(txtbuffer, &start, &end)) { - /* FIX ME -- replace with text in status bar */ - fprintf(stderr, "Nothing selected\n"); - return; - } - text = g_strdup(gtk_text_buffer_get_text(txtbuffer, &start, &end, FALSE)); - //fprintf(stderr, "selected text = %s\n",text); - hex_digit = strtok(text, " "); - strcpy(page, "0x"); - do { - if (strlen(hex_digit)>2) { - fprintf(stderr, "Not a hex value\n"); - return; - } - strcpy(digits[num_digits++],hex_digit); - } while (num_digits < 4 && (hex_digit = strtok(NULL," "))); - if (msb) { - for (i=0;i=0;i--) { - strcat(page, digits[i]); - } - } - g_free(text); - //fprintf(stderr, "going to page %s\n",page); - entry = glade_xml_get_widget (xml, "debug_entry"); - gtk_entry_set_text(GTK_ENTRY(entry),page); - gmdb_debug_display_cb(entry, NULL); -} - -/* - * w: pointer to GtkEntry 'debug_entry' - */ -void -gmdb_debug_display_cb(GtkWidget *w, gpointer data) -{ - int page; - GtkWidget *win; - gchar *s; - GladeXML *xml; - - fprintf(stderr, "display fired\n"); - - if (!mdb) return; - - win = gtk_widget_get_toplevel(w); - xml = g_object_get_data(G_OBJECT(win), "debugwin_xml"); - - s = g_strdup(gtk_entry_get_text(GTK_ENTRY(w))); - if (!strncmp(s,"0x",2)) { - page = strtol(s+2, NULL, 16); - } else { - page = strtol(s, NULL, 10); - } - g_free(s); - - if (page>gmdb_get_max_page(mdb) || page<0) { - GtkWidget* dlg = gtk_message_dialog_new (GTK_WINDOW(win), - GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, - GTK_BUTTONS_CLOSE, - _("Page entered is outside valid page range.")); - gtk_dialog_run (GTK_DIALOG (dlg)); - gtk_widget_destroy (dlg); - } - - /* add to the navigation list */ - gmdb_nav_add_page(win, page); - /* gmdb_debug_display handles the mechanics of getting the page up */ - gmdb_debug_display(xml, page); -} -static void -gmdb_debug_display(GladeXML *xml, guint32 page) -{ - char *fbuf; - char *tbuf; - int i, j; - char line[80]; - char field[10]; - GtkTextBuffer *buffer; - GtkTextIter iter; - GtkTextView *textview; - GtkWidget *entry, *window; - char *pagestr; - gboolean *dissect; - GtkWidget *tree; - GtkTreeView *store; - - textview = (GtkTextView *) glade_xml_get_widget (xml, "debug_textview"); - gmdb_debug_clear(xml); - - pagestr = g_strdup_printf("%lu", (unsigned long)page); - entry = glade_xml_get_widget (xml, "debug_entry"); - gtk_entry_set_text(GTK_ENTRY(entry),pagestr); - g_free(pagestr); - - mdb_read_pg(mdb, page); - fbuf = g_malloc(mdb->fmt->pg_size); - memcpy(fbuf, mdb->pg_buf, mdb->fmt->pg_size); - - tbuf = g_malloc0( (mdb->fmt->pg_size / 16) * sizeof(line)); - i = 0; - while (ifmt->pg_size) { - sprintf(line,"%06x ", i); - - for(j=0; j<16; j++) { - sprintf(field, "%02x ", ((unsigned char*)fbuf)[i+j]); - strcat(line,field); - } - - strcat(line, " |"); - - for(j=0; j<16; j++) { - sprintf(field, "%c", (isprint(fbuf[i+j])) ? fbuf[i+j] : '.'); - strcat(line,field); - } - strcat(line, "|\n"); - i += 16; - strcat(tbuf, line); - } - buffer = gtk_text_view_get_buffer(textview); - gtk_text_buffer_get_iter_at_offset (buffer, &iter, 0); - gtk_text_buffer_insert(buffer,&iter,tbuf,strlen(tbuf)); - - tree = glade_xml_get_widget(xml, "debug_treeview"); - store = (GtkTreeView *) gtk_tree_view_get_model(GTK_TREE_VIEW(tree)); - - window = glade_xml_get_widget(xml, "debug_window"); - dissect = g_object_get_data(G_OBJECT(window),"dissect"); - if (!dissect || *dissect) - gmdb_debug_dissect(GTK_TREE_STORE(store), fbuf, 0, mdb->fmt->pg_size); - - g_free(fbuf); - g_free(tbuf); -} -/* functions */ -static long -gmdb_get_max_page(MdbHandle *mdb) -{ -struct stat st; - - assert( fstat(mdb->f->fd, &st)!=-1 ); - return (st.st_size/mdb->fmt->pg_size)-1; -} -static gchar * -gmdb_val_to_str(GMdbValStr *valstr, gint val) -{ -gchar *strptr; -int i = 0; - - do { - strptr = valstr[i].string; - if (val == valstr[i].value) { - return strptr; - } - i++; - } while (strptr); - return "unknown"; -} -static guint16 -get_uint16(void *c) -{ - guint16 i; - memcpy(&i, c, 2); - return GINT16_FROM_LE(i); -} -static guint32 -get_uint32(void *c) -{ - guint32 l; - memcpy(&l, c, 4); - return GINT32_FROM_LE(l); -} -static void -gmdb_debug_dissect_column(GtkTreeStore *store, GtkTreeIter *parent, char *fbuf, int offset) -{ - gchar *str; - unsigned char *foff = (unsigned char*)fbuf + offset; - - str = g_strdup_printf("Column Type: 0x%02x (%s)", foff[0], - gmdb_val_to_str(column_types, foff[0])); - gmdb_debug_add_item(store, parent, str, offset, 1); - str = g_strdup_printf("Column #: %d", get_uint16(foff+1)); - gmdb_debug_add_item(store, parent, str, offset+1, 2); - str = g_strdup_printf("VarCol Offset: %d", get_uint16(foff+3)); - gmdb_debug_add_item(store, parent, str, offset+3, 2); - str = g_strdup_printf("Unknown"); - gmdb_debug_add_item(store, parent, str, offset+5, 4); - str = g_strdup_printf("Unknown"); - gmdb_debug_add_item(store, parent, str, offset+9, 4); - str = g_strdup_printf("Variable Column: %s", - (foff[13] & 0x01) ? "No" : "Yes"); - gmdb_debug_add_item(store, parent, str, offset+13, 1); - str = g_strdup_printf("Fixed Col Offset: %d", get_uint16(foff+14)); - gmdb_debug_add_item(store, parent, str, offset+14, 2); - str = g_strdup_printf("Column Length: %d", get_uint16(foff+16)); - gmdb_debug_add_item(store, parent, str, offset+16, 2); -} -static void -gmdb_debug_dissect_index1(GtkTreeStore *store, GtkTreeIter *parent, char *fbuf, int offset) -{ - gchar *str; - - gmdb_debug_add_item(store, parent, g_strdup("Unknown"), offset, 4); - str = g_strdup_printf("Rows in Index: %lu", - (unsigned long)get_uint32(fbuf+offset+4)); - gmdb_debug_add_item(store, parent, str, offset+4, 4); -} -static void -gmdb_debug_dissect_index2(GtkTreeStore *store, GtkTreeIter *parent, char *fbuf, int offset) -{ - gchar *str; - unsigned char flags; - - str = g_strdup("Column mask"); - gmdb_debug_add_item(store, parent, str, offset, 30); - str = g_strdup("Unknown"); - gmdb_debug_add_item(store, parent, str, offset+30, 4); - str = g_strdup("Root index page"); - gmdb_debug_add_item(store, parent, str, offset+34, 4); - - flags = fbuf[offset+38]; - str = g_strconcat("Index Flags:", - (flags & MDB_IDX_UNIQUE) ? " Unique" : "", - (flags & MDB_IDX_IGNORENULLS) ? " IgnoreNulls" : "", - (flags & MDB_IDX_REQUIRED) ? " Required" : "", - NULL); - if (strcmp(str, "Index Flags:") == 0) { - gchar *str2 = g_strconcat(str, " None", NULL); - g_free(str); - str = str2; - } - gmdb_debug_add_item(store, parent, str, offset+38, 1); -} -static void -gmdb_debug_add_page_ptr(GtkTreeStore *store, GtkTreeIter *parent, char *fbuf, const char *label, int offset) -{ - gchar *str; - GtkTreeIter *node; - guint32 pg_row = get_uint32(fbuf+offset); - - str = g_strdup(label); - node = gmdb_debug_add_item(store, parent, str, offset, 4); - - str = g_strdup_printf("Row Number: %u", pg_row & 0xff); - gmdb_debug_add_item(store, node, str, offset, 1); - str = g_strdup_printf("Page Number: %u", pg_row >> 8); - gmdb_debug_add_item(store, node, str, offset+1, 3); -} -static void -gmdb_debug_dissect_row(GtkTreeStore *store, GtkTreeIter *parent, char *fbuf, int offset, int len) -{ - gchar *str; - int bitmask_sz; - int num_cols, var_cols, var_cols_loc, fixed_end, eod_ptr; - int i; - - num_cols = fbuf[offset]; - str = g_strdup_printf("Num columns: %u", num_cols); - gmdb_debug_add_item(store, parent, str, offset, 1); - bitmask_sz = (num_cols+7) / 8; - var_cols_loc = offset + len - bitmask_sz - 1; - var_cols = fbuf[var_cols_loc]; - fixed_end = offset + fbuf[var_cols_loc - 1] - 1; /* work even if 0 b/c of EOD */ - str = g_strdup("Fixed columns"); - gmdb_debug_add_item(store, parent, str, offset + 1, fixed_end - offset); - for (i=0;ifmt->pg_size - row_start; - else - row_len = (get_uint16(fbuf+offset+14+(i-1)*2) - & 0x0FFF) - row_start; - str = g_strdup_printf("Row %d", i+1); - /*container = */gmdb_debug_add_item(store, NULL, str, - row_start, row_len); - - /* usage pages have parent id of 0 (database) and do not - * follow normal row format */ - /* if (tdef) - gmdb_debug_dissect_row(store, container, fbuf, row_start, row_len); - */ - } -} -static void -gmdb_debug_dissect_data_pg3(GtkTreeStore *store, char *fbuf, int offset, int len) -{ - gchar *str; - int num_rows, i, row_start, row_len; - guint32 tdef; - GtkTreeIter *container; - - str = g_strdup_printf("Page free space: %u", get_uint16(fbuf+offset+2)); - gmdb_debug_add_item(store, NULL, str, offset+2, 2); - - tdef = get_uint32(fbuf+offset+4); - str = g_strdup_printf("Parent's TDEF page: 0x%06x (%lu)", tdef, - (unsigned long)tdef); - gmdb_debug_add_item(store, NULL, str, offset+4, 4); - - num_rows = get_uint16(fbuf+offset+8); - str = g_strdup_printf("Num rows: %u", num_rows); - gmdb_debug_add_item(store, NULL, str, offset+8, 2); - for (i=0;ifmt->pg_size - row_start; - else - row_len = (get_uint16(fbuf+offset+10+(i-1)*2) - & 0x0FFF) - row_start; - str = g_strdup_printf("Row %d", i+1); - container = gmdb_debug_add_item(store, NULL, str, - row_start, row_len); - - /* usage pages have parent id of 0 (database) and do not - * follow normal row format */ - if (tdef) - gmdb_debug_dissect_row(store, container, fbuf, - row_start, row_len); - } -} -static void -gmdb_debug_dissect_data_pg(GtkTreeStore *store, char *fbuf, int offset, int len) -{ - if (IS_JET3(mdb)) - gmdb_debug_dissect_data_pg3(store, fbuf, offset, len); - else - gmdb_debug_dissect_data_pg4(store, fbuf, offset, len); -} -static void -gmdb_debug_dissect_tabledef_pg4(GtkTreeStore *store, char *fbuf, int offset, int len) -{ - gchar *str; - guint32 i, num_idx, num_cols, idx_entries; - int newbase, infobase; - GtkTreeIter *container; - char *foff = fbuf + offset; - - str = g_strdup_printf("Next TDEF Page: 0x%06x (%lu)", - get_uint32(foff+4), (unsigned long)get_uint32(foff+4)); - gmdb_debug_add_item(store, NULL, str, offset+4, 4); - str = g_strdup_printf("Length of Data: %lu", - (unsigned long)get_uint32(foff+8)); - gmdb_debug_add_item(store, NULL, str, offset+8, 4); - str = g_strdup_printf("Records: %lu", - (unsigned long)get_uint32(foff+16)); - gmdb_debug_add_item(store, NULL, str, offset+16, 4); - str = g_strdup_printf("Autonumber Value: %lu", - (unsigned long)get_uint32(foff+20)); - gmdb_debug_add_item(store, NULL, str, offset+20, 4); - str = g_strdup_printf("Table Type: 0x%02x (%s)", foff[40], - gmdb_val_to_str(table_types, foff[40])); - gmdb_debug_add_item(store, NULL, str, offset+40, 1); - str = g_strdup_printf("Max Columns: %u", get_uint16(foff+41)); - gmdb_debug_add_item(store, NULL, str, offset+41, 2); - str = g_strdup_printf("Var Columns: %u", get_uint16(foff+43)); - gmdb_debug_add_item(store, NULL, str, offset+43, 2); - num_cols = get_uint16(foff+45); - str = g_strdup_printf("Columns: %u", num_cols); - gmdb_debug_add_item(store, NULL, str, offset+45, 2); - idx_entries = get_uint32(foff+47); - str = g_strdup_printf("Index Entries: %lu", - (unsigned long)idx_entries); - gmdb_debug_add_item(store, NULL, str, offset+47, 4); - num_idx = get_uint32(foff+51); - str = g_strdup_printf("Real Indices: %lu", - (unsigned long)num_idx); - gmdb_debug_add_item(store, NULL, str, offset+51, 4); - - gmdb_debug_add_page_ptr(store, NULL, fbuf, "Used Pages Pointer", offset+55); - gmdb_debug_add_page_ptr(store, NULL, fbuf, "Pages Freespace Pointer", offset+59); - newbase = offset+63; - - if (num_idx > 0) { - str = g_strdup("Index Entries"); - container = gmdb_debug_add_item(store, NULL, str, -1, 0); - } - for (i=0;i -#include -#include -#include -#include -#include "mdbtools.h" -#include "gmdb.h" - -MdbHandle *mdb; -extern int main_show_debug; -extern GladeXML *mainwin_xml; - -#define MAX_ACTIONITEMS 9 -#define MAX_ICONVIEWS 6 -typedef struct { - GtkWidget* actionitems[MAX_ACTIONITEMS]; - GtkWidget* iconviews[MAX_ICONVIEWS]; -} GmdbWidgets; -GmdbWidgets* gmdbwidgets = NULL; - -static void gmdb_file_open_recent(gchar *menuname) -{ -gchar *text, cfgname[100]; - - sprintf(cfgname,"/gmdb/RecentFiles/%s.filepath", menuname); - text = gnome_config_get_string(cfgname); - gmdb_file_open(text); - g_free(text); - gmdb_load_recent_files(); -} -void gmdb_file_open_recent_1() { gmdb_file_open_recent("menu_recent1"); } -void gmdb_file_open_recent_2() { gmdb_file_open_recent("menu_recent2"); } -void gmdb_file_open_recent_3() { gmdb_file_open_recent("menu_recent3"); } -void gmdb_file_open_recent_4() { gmdb_file_open_recent("menu_recent4"); } - -static void -gmdb_file_shuffle_recent(gchar *file_path) -{ -gchar *text, cfgname[100]; -int i, index=0; - - for (i=1; i<=4; i++) { - sprintf(cfgname,"/gmdb/RecentFiles/menu_recent%d.filepath", i); - text = gnome_config_get_string(cfgname); - if (text && !strcmp(text,file_path)) { - index = i; - break; - } - g_free(text); - } - /* printf("found file %slocation at menu %d\n",file_path, index); */ - /* it is the most recently used file, we're done */ - if (index==1) return; - - /* if this file is not on the recent list bump item 4 */ - if (!index) index=4; - - for (i=1; i=0 && file_path[i]!='/';i--); - if (file_path[i]=='/') { - strncpy(basename,&file_path[i+1],32); - } else { - strncpy(basename,file_path,32); - } - basename[32]='\0'; - gnome_config_set_string("/gmdb/RecentFiles/menu_recent1.basename", basename); - gnome_config_set_string("/gmdb/RecentFiles/menu_recent1.filepath", file_path); - gnome_config_sync(); -} - -static void -gmdb_reset_widgets (GmdbWidgets* gw) { - int i; - GtkWidget *w; - - gmdb_table_set_sensitive (FALSE); - - for (i = 0; i < MAX_ACTIONITEMS; ++i) { - w = gw->actionitems[i]; - gtk_widget_set_sensitive (w, FALSE); - } - for (i = 0; i < MAX_ICONVIEWS; ++i) { - w = gw->iconviews[i]; - gtk_list_store_clear (GTK_LIST_STORE (gtk_icon_view_get_model (GTK_ICON_VIEW (w)))); - } - - w = glade_xml_get_widget (mainwin_xml, "gmdb"); - gtk_window_set_title (GTK_WINDOW (w), "MDB File Viewer"); -} - -static void -gmdb_icon_list_fill (MdbHandle* mdb, GtkTreeModel* store, GdkPixbuf* pixbuf, int objtype) { - int i; - MdbCatalogEntry* entry; - GtkTreeIter iter; - - for (i=0; i < mdb->num_catalog; i++) { - entry = g_ptr_array_index (mdb->catalog, i); - if (entry->object_type == objtype) { - /* skip the MSys tables - FIXME: can other objects be hidden too? */ - if (objtype != MDB_TABLE || mdb_is_user_table (entry)) { - gtk_list_store_prepend (GTK_LIST_STORE (store), &iter); - gtk_list_store_set (GTK_LIST_STORE (store), &iter, 0, pixbuf, 1, entry->object_name, -1); - } - } - } -} - -static void -gmdb_file_init (void) { - GtkWidget* w; - GtkListStore* store; - int i; - gchar* ainames[] = { "sql_menu", "debug_menu", "schema_menu", "info_menu", "close_menu", "sql_button", "schema_button", "info_button", "close_button" }; - gchar* swnames[] = { "sw_form", "sw_macro", "sw_module", "sw_query", "sw_report", "sw_table" }; - - if (gmdbwidgets) { - return; - } - - gmdbwidgets = g_new0 (GmdbWidgets, 1); - - for (i = 0; i < MAX_ACTIONITEMS; ++i) { - gmdbwidgets->actionitems[i] = glade_xml_get_widget (mainwin_xml, ainames[i]); - } - for (i = 0; i < MAX_ICONVIEWS; ++i) { - store = gtk_list_store_new (2, GDK_TYPE_PIXBUF, G_TYPE_STRING); - - gmdbwidgets->iconviews[i] = gtk_icon_view_new(); - gtk_icon_view_set_model (GTK_ICON_VIEW (gmdbwidgets->iconviews[i]), GTK_TREE_MODEL (store)); - gtk_icon_view_set_pixbuf_column (GTK_ICON_VIEW (gmdbwidgets->iconviews[i]), 0); - gtk_icon_view_set_text_column (GTK_ICON_VIEW (gmdbwidgets->iconviews[i]), 1); - - w = glade_xml_get_widget (mainwin_xml, swnames[i]); - gtk_container_add (GTK_CONTAINER (w), gmdbwidgets->iconviews[i]); - gtk_widget_show_all (w); - } - - g_signal_connect_after (gmdbwidgets->iconviews[5], "selection-changed", G_CALLBACK (gmdb_table_select_cb), NULL); - gmdb_table_init_popup (gmdbwidgets->iconviews[5]); -} - -void -gmdb_file_open(gchar *file_path) -{ - GtkWidget *win; - GdkPixbuf *pixbuf; - GtkTreeModel *store; - gchar *file_name; - gchar title[100]; - int i; - gchar* pbnames[] = { GMDB_ICONDIR "form_big.xpm", GMDB_ICONDIR "macro_big.xpm", - GMDB_ICONDIR "module_big.xpm", GMDB_ICONDIR "query_big.xpm", GMDB_ICONDIR "report_big.xpm", - GMDB_ICONDIR "table_big.xpm" }; - int objtype[] = { MDB_FORM, MDB_MACRO, MDB_MODULE, MDB_QUERY, MDB_REPORT, MDB_TABLE }; - - if (!gmdbwidgets) { - gmdb_file_init(); - } - - gmdb_reset_widgets (gmdbwidgets); - mdb = mdb_open(file_path, MDB_NOFLAGS); - if (!mdb) { - GtkWidget* dlg = gtk_message_dialog_new (NULL, - GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE, - _("Unable to open file.")); - gtk_dialog_run (GTK_DIALOG (dlg)); - gtk_widget_destroy (dlg); - return; - } - mdb_set_default_backend(mdb, "access"); - gmdb_file_shuffle_recent(file_path); - gmdb_file_add_recent(file_path); - -#ifdef SQL - sql->mdb = mdb; -#endif - mdb_read_catalog(mdb, MDB_ANY); - - for (i = 0; i < MAX_ICONVIEWS; ++i) { - store = gtk_icon_view_get_model (GTK_ICON_VIEW (gmdbwidgets->iconviews[i])); - pixbuf = gdk_pixbuf_new_from_file (pbnames[i], NULL); - gmdb_icon_list_fill (mdb, store, pixbuf, objtype[i]); - g_object_unref (pixbuf); - } - - //if (main_show_debug) gmdb_debug_init(mdb); - - for (i=strlen(file_path);i>0 && file_path[i-1]!='/';i--); - file_name=&file_path[i]; - - win = (GtkWidget *) glade_xml_get_widget (mainwin_xml, "gmdb"); - g_snprintf(title, 100, "%s - MDB File Viewer",file_name); - gtk_window_set_title(GTK_WINDOW(win), title); - - for (i = 0; i < MAX_ACTIONITEMS; ++i) { - win = gmdbwidgets->actionitems[i]; - gtk_widget_set_sensitive (win, TRUE); - } -} - -void -gmdb_file_select_cb(GtkWidget *button, gpointer data) -{ - GtkWindow *parent_window = (GtkWindow *) glade_xml_get_widget (mainwin_xml, "gmdb"); - - GtkWidget *dialog = gtk_file_chooser_dialog_new ("Please select a database.", - parent_window, - GTK_FILE_CHOOSER_ACTION_OPEN, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, - NULL); - - if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) - { - char *filename; - - filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); - gmdb_file_open(filename); - gmdb_load_recent_files(); - } - - gtk_widget_destroy (dialog); -} - -void -gmdb_file_close_cb(GtkWidget *button, gpointer data) -{ - gmdb_reset_widgets (gmdbwidgets); - gmdb_debug_close_all(); -#if SQL - gmdb_sql_close_all(); -#endif -} diff --git a/src/gmdb2/gladefiles/Makefile.am b/src/gmdb2/gladefiles/Makefile.am deleted file mode 100644 index bd894dc..0000000 --- a/src/gmdb2/gladefiles/Makefile.am +++ /dev/null @@ -1,15 +0,0 @@ -gladedir = $(datadir)/gmdb/glade - -glade_DATA = \ - gmdb.glade \ - gmdb-sql.glade \ - gmdb-debug.glade \ - gmdb-export.glade \ - gmdb-schema.glade \ - gmdb-prefs.glade \ - gmdb-props.glade \ - gmdb-tabledef.glade \ - ../../../COPYING - -EXTRA_DIST = $(glade_DATA) - diff --git a/src/gmdb2/gladefiles/gmdb-debug.glade b/src/gmdb2/gladefiles/gmdb-debug.glade deleted file mode 100644 index 9996d6d..0000000 --- a/src/gmdb2/gladefiles/gmdb-debug.glade +++ /dev/null @@ -1,364 +0,0 @@ - - - - - - True - MDB File Viewer - - - True - - - True - - - True - File - - - - - gtk-new - True - True - True - - - - - - True - - - - - gtk-close - True - True - True - - - - - - - - - - True - View - - - - - True - _Dissector - True - True - - - - - - True - _Back - True - - - - - - gtk-new - True - True - True - - - - - - True - - - - - True - _Selected Page - True - - - - - - True - Selected Page (_MSB) - True - - - - - - - - - - True - Help - - - - - gtk-about - True - True - True - - - - - - - - - - False - 0 - - - - - True - - - True - 1 - icons - - - True - Open a new window - True - gtk-new - - - - False - True - - - - - True - - - False - - - - - True - Back - True - gtk-go-back - - - - False - True - - - - - True - Forward - True - gtk-go-forward - - - - False - True - - - - - True - Jump to - True - gtk-jump-to - - - - False - True - - - - - True - - - False - - - - - True - Close window - True - gtk-close - - - - False - True - - - - - - - 1 - - - - - True - - - True - 0 - none - - - True - 12 - - - True - Page Number - - - False - False - 0 - - - - - True - - - False - False - 1 - - - - - True - True - - - - 2 - - - - - _Display - True - True - False - True - - - - False - False - 3 - - - - - - - False - False - 0 - - - - - True - True - - - True - True - automatic - automatic - - - True - True - False - - - - - False - True - - - - - True - True - automatic - automatic - - - True - True - - - - - True - True - - - - - 1 - - - - - 2 - - - - - True - 2 - - - True - - - 0 - - - - - False - 3 - - - - - - diff --git a/src/gmdb2/gladefiles/gmdb-export.glade b/src/gmdb2/gladefiles/gmdb-export.glade deleted file mode 100644 index 3b4f67e..0000000 --- a/src/gmdb2/gladefiles/gmdb-export.glade +++ /dev/null @@ -1,324 +0,0 @@ - - - - - - True - Export Table Data - normal - - - True - - - True - 30 - 7 - 2 - 30 - 8 - - - True - 0 - <b>File Name:</b> - True - - - GTK_FILL - - - - - - True - 0 - <b>Line Terminator:</b> - True - - - 1 - 2 - GTK_FILL - - - - - - True - 0 - <b>Column Separator:</b> - True - - - 2 - 3 - GTK_FILL - - - - - - True - 0 - <b>Options:</b> - True - - - 6 - 7 - GTK_FILL - - - - - - Include Headers - True - True - False - True - True - True - - - 1 - 2 - 6 - 7 - GTK_FILL - - - - - - True - - - - 1 - 2 - 1 - 2 - - - - - True - - - - 1 - 2 - 2 - 3 - - - - - True - 0 - <b>Binaries:</b> - True - - - 5 - 6 - GTK_FILL - - - - - - True - - - - 1 - 2 - 5 - 6 - - - - - True - 0 - <b>Quote Character:</b> - True - - - 3 - 4 - GTK_FILL - - - - - - True - - - - 1 - 2 - 3 - 4 - - - - - True - 0 - <b>Escape Character:</b> - True - - - 4 - 5 - GTK_FILL - - - - - - True - - - - 1 - 2 - 4 - 5 - - - - - True - True - - table.csv - - - 1 - 2 - - - - - 2 - - - - - end - - - gtk-help - -11 - True - True - True - False - True - - - - False - False - 0 - - - - - gtk-cancel - -6 - True - True - True - False - True - - - - False - False - 1 - - - - - -5 - True - True - True - False - - - - True - 0 - 0 - - - True - 2 - - - True - gtk-convert - - - False - False - 0 - - - - - True - _Export - True - - - False - False - 1 - - - - - - - - - False - False - 2 - - - - - gtk-save - True - True - False - True - - - False - False - 3 - - - - - False - end - 0 - - - - - - diff --git a/src/gmdb2/gladefiles/gmdb-prefs.glade b/src/gmdb2/gladefiles/gmdb-prefs.glade deleted file mode 100644 index ed10ce5..0000000 --- a/src/gmdb2/gladefiles/gmdb-prefs.glade +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - True - Preferences - normal - - - True - - - True - 10 - 2 - - - True - 0 - <b>Maximum Rows to Display:</b> - True - - - - - - - - True - True - - - 1 - 2 - GTK_FILL - - - - - - False - 2 - - - - - True - end - - - gtk-help - -11 - True - True - True - False - True - - - False - False - 0 - - - - - gtk-cancel - -6 - True - True - True - False - True - - - False - False - 1 - - - - - gtk-ok - -5 - True - True - True - False - True - - - False - False - 2 - - - - - False - end - 0 - - - - - - diff --git a/src/gmdb2/gladefiles/gmdb-props.glade b/src/gmdb2/gladefiles/gmdb-props.glade deleted file mode 100644 index cfa2b98..0000000 --- a/src/gmdb2/gladefiles/gmdb-props.glade +++ /dev/null @@ -1,307 +0,0 @@ - - - - - - True - dialog1 - normal - - - True - - - True - 10 - 9 - 2 - 30 - 8 - - - True - 0 - - - 1 - 2 - 4 - 5 - GTK_FILL - - - - - - True - 0 - <b>Number of Objects:</b> - True - right - - - 5 - 6 - - - - - - True - 0 - <b>Number of Pages:</b> - True - right - - - 4 - 5 - - - - - - True - 0 - <b>File Size:</b> - True - right - - - 3 - 4 - - - - - - True - 0 - <b>JET Version:</b> - True - right - - - 1 - 2 - - - - - - True - 0 - <b>File Name:</b> - True - right - okbutton1 - - - - - - - - True - 0 - - - 1 - 2 - GTK_FILL - - - - - - True - 0 - - - 1 - 2 - 3 - 4 - GTK_FILL - - - - - - True - 0 - - - 1 - 2 - 5 - 6 - GTK_FILL - - - - - - True - 0 - - - 1 - 2 - 1 - 2 - GTK_FILL - - - - - - True - 0 - <b>Title:</b> - True - - - 6 - 7 - GTK_FILL - - - - - - True - 0 - <b>Author:</b> - True - - - 7 - 8 - GTK_FILL - - - - - - True - 0 - - - 1 - 2 - 6 - 7 - GTK_FILL - - - - - - True - 0 - - - 1 - 2 - 7 - 8 - GTK_FILL - - - - - - True - 0 - - - 1 - 2 - 8 - 9 - GTK_FILL - - - - - - True - 0 - <b>Company:</b> - True - - - 8 - 9 - GTK_FILL - - - - - - True - 0 - <b>Encrypted:</b> - True - - - 2 - 3 - GTK_FILL - - - - - - True - 0 - - - 1 - 2 - 2 - 3 - GTK_FILL - - - - - - False - False - 2 - - - - - True - end - - - gtk-ok - -5 - True - True - True - False - True - - - - False - False - 0 - - - - - False - end - 0 - - - - - - diff --git a/src/gmdb2/gladefiles/gmdb-schema.glade b/src/gmdb2/gladefiles/gmdb-schema.glade deleted file mode 100644 index e278d0b..0000000 --- a/src/gmdb2/gladefiles/gmdb-schema.glade +++ /dev/null @@ -1,376 +0,0 @@ - - - - - - True - Export Schema - normal - - - True - - - True - 33 - 5 - 2 - 30 - 8 - - - True - 0 - <b>Table:</b> - True - right - - - 1 - 2 - GTK_FILL - - - - - - True - 0 - <b>Schema Dialect:</b> - True - right - - - 2 - 3 - GTK_FILL - - - - - - Include Relationships - True - True - False - True - True - True - - - 1 - 2 - 9 - 10 - GTK_FILL - - - - - - True - 0 - <b>Options:</b> - True - right - - - 3 - 4 - GTK_FILL - - - - - - Include Drop Table commands - True - True - False - True - True - True - - - 1 - 2 - 3 - 4 - GTK_FILL - - - - - - Include Not Null constraints - True - True - False - True - True - True - - - 1 - 2 - 4 - 5 - GTK_FILL - - - - - - Include indexes - True - True - False - True - True - True - - - 1 - 2 - 8 - 9 - GTK_FILL - - - - - - Include description on tables and columns - True - True - False - True - True - True - - - 1 - 2 - 7 - 8 - GTK_FILL - - - - - - Include Not Empty constraints - True - True - False - True - True - True - - - 1 - 2 - 6 - 7 - GTK_FILL - - - - - - Include Default values - True - True - False - True - True - True - - - 1 - 2 - 5 - 6 - GTK_FILL - - - - - - True - 0 - <b>File Name:</b> - True - - - GTK_FILL - - - - - - True - - - - 1 - 2 - 1 - 2 - - - - - True - 0 - Access -Oracle -Sybase -MS SQL Server -PostgreSQL -MySQL -SQLite - - - 1 - 2 - 2 - 3 - - - - - True - True - - export.sql - - - 1 - 2 - - - - - - - - - - - - - - - - - - - - - - - False - 2 - - - - - True - end - - - gtk-help - -11 - True - True - True - False - True - - - - False - False - 0 - - - - - gtk-cancel - -6 - True - True - True - False - True - - - - False - False - 1 - - - - - -5 - True - True - True - False - - - - True - 0 - 0 - - - True - 2 - - - True - gtk-convert - - - False - False - 0 - - - - - True - _Export - True - - - False - False - 1 - - - - - - - - - False - False - 2 - - - - - False - end - 0 - - - - - - diff --git a/src/gmdb2/gladefiles/gmdb-sql.glade b/src/gmdb2/gladefiles/gmdb-sql.glade deleted file mode 100644 index ec7b1f3..0000000 --- a/src/gmdb2/gladefiles/gmdb-sql.glade +++ /dev/null @@ -1,403 +0,0 @@ - - - - - - True - MDB File Viewer - - - True - - - True - - - True - _Query - True - - - - - gtk-new - True - True - True - - - - - - gtk-open - True - True - True - - - - - gtk-save - True - True - True - - - - - gtk-save-as - True - True - True - - - - - Save _Results... - True - True - False - - - True - stock_export-16.png - - - - - - - True - - - - - gtk-execute - True - True - True - - - - - - True - - - - - gtk-close - True - True - True - - - - - - - - - True - Edit - - - - - gtk-cut - True - True - True - - - - - gtk-copy - True - True - True - - - - - gtk-paste - True - True - True - - - - - - - - - True - Help - - - - - gtk-about - True - True - True - - - - - - - - - - False - 0 - - - - - True - - - True - 1 - icons - - - True - Start new query - gtk-new - - - - False - True - - - - - True - Load query from file - gtk-open - - - False - True - - - - - True - Save query to file - Save Results - True - gtk-save - - - False - True - - - - - True - Execute query - gtk-execute - - - False - True - - - - - True - Save results to a file - Save Results - True - stock_export.png - - - False - True - - - - - True - Close this window - gtk-close - - - False - True - - - - - - - 1 - - - - - True - True - - - True - True - - - True - 5 - 0 - in - - - True - True - automatic - automatic - - - True - True - False - - - - - - - False - True - - - - - True - - - True - 4 - 0 - in - - - True - True - never - automatic - - - 50 - True - True - - - - - - - 0 - - - - - True - 5 - - - True - Recent Queries: - - - False - False - 0 - - - - - True - - - - 1 - - - - - False - False - 1 - - - - - True - True - - - - - False - True - - - - - True - 3 - 0 - in - - - True - True - automatic - automatic - - - True - True - - - - - - - True - True - - - - - 2 - - - - - True - 2 - - - True - - - 0 - - - - - False - 3 - - - - - - diff --git a/src/gmdb2/gladefiles/gmdb-tabledef.glade b/src/gmdb2/gladefiles/gmdb-tabledef.glade deleted file mode 100644 index 9d79c09..0000000 --- a/src/gmdb2/gladefiles/gmdb-tabledef.glade +++ /dev/null @@ -1,276 +0,0 @@ - - - - - - - - True - vertical - - - True - True - automatic - automatic - - - True - True - both - - - - - 0 - - - - - True - 10 - 2 - - - True - Size - - - - - True - True - False - - - - 1 - 2 - - - - - True - True - False - - - - 1 - 2 - 8 - 9 - - - - - True - Required - - - 8 - 9 - - - - - True - Format - - - 1 - 2 - - - - - True - True - False - - - - 1 - 2 - 1 - 2 - - - - - True - Input mask - - - 3 - 4 - - - - - True - True - False - - - - 1 - 2 - 3 - 4 - - - - - True - Caption - - - 4 - 5 - - - - - True - Default value - - - 5 - 6 - - - - - True - Validation rule - - - 6 - 7 - - - - - True - Validation error message - - - 7 - 8 - - - - - True - Allow zero length - - - 9 - 10 - - - - - True - True - False - - - - 1 - 2 - 4 - 5 - - - - - True - True - False - - - - 1 - 2 - 5 - 6 - - - - - True - True - False - - - - 1 - 2 - 6 - 7 - - - - - True - True - False - - - - 1 - 2 - 7 - 8 - - - - - True - True - False - - - - 1 - 2 - 9 - 10 - - - - - True - Decimal places - - - 2 - 3 - - - - - True - True - False - - - - 1 - 2 - 2 - 3 - - - - - False - 1 - - - - - - diff --git a/src/gmdb2/gladefiles/gmdb.glade b/src/gmdb2/gladefiles/gmdb.glade deleted file mode 100644 index 0df5c7c..0000000 --- a/src/gmdb2/gladefiles/gmdb.glade +++ /dev/null @@ -1,821 +0,0 @@ - - - - - - - - - - True - MDB File Viewer - True - - - True - True - - - True - - - True - 1 - icons - - - True - Open database file - gtk-open - - - - False - True - - - - - True - False - View database file properties - gtk-properties - - - - False - True - - - - - True - False - Close database file - gtk-close - - - - False - True - - - - - True - False - Perform SQL query - gtk-execute - - - - False - True - - - - - True - False - Export schema definition - gtk-convert - - - - False - True - - - - - - - 1 - BONOBO_DOCK_ITEM_BEH_EXCLUSIVE - - - - - True - - - True - - - True - _File - True - - - - - gtk-open - True - True - True - - - - - - True - - - - - gtk-properties - True - False - True - True - - - - - - True - - - - - gtk-close - True - False - True - True - - - - - - True - - - - - True - item - True - - - - - - - True - item3 - True - - - - - - - True - item4 - True - - - - - - - True - item5 - True - - - - - - - True - - - - - gtk-quit - True - True - True - - - - - - - - - - True - _Edit - True - - - - - gtk-preferences - True - True - True - - - - - - - - - - True - _Tools - True - - - - - S_QL Window - True - False - True - False - - - - - True - gtk-execute - - - - - - - _Debug Window - True - False - True - False - - - - True - gtk-find - - - - - - - E_xport Schema - True - False - True - False - - - - True - gtk-convert - - - - - - - - - - - True - _Help - True - - - - - gtk-about - True - True - True - - - - - - True - - - - - gtk-help - True - True - True - - - - - - - - - - - - BONOBO_DOCK_ITEM_BEH_EXCLUSIVE | BONOBO_DOCK_ITEM_BEH_NEVER_VERTICAL | BONOBO_DOCK_ITEM_BEH_LOCKED - - - - - True - - - True - True - - - True - - - True - - - True - 10 - 0 - in - - - True - True - automatic - automatic - - - - - 0 - - - - - 120 - True - 18 - vertical - 10 - - - Definition - True - True - False - True - - - - False - False - 0 - - - - - Data - True - True - False - True - - - - False - False - 1 - - - - - Export - True - True - False - True - - - - False - False - 2 - - - - - False - False - 1 - - - - - - - - - True - 2 - - - True - table.xpm - - - 0 - - - - - True - Tables - - - False - False - 1 - - - - - False - tab - - - - - True - - - True - 10 - 0 - in - - - True - True - automatic - automatic - - - - - 0 - - - - - True - - - False - False - 1 - - - - - 1 - - - - - True - 2 - - - True - query.xpm - - - 0 - - - - - True - Queries - - - False - False - 1 - - - - - 1 - False - tab - - - - - True - - - True - 10 - 0 - in - - - True - True - automatic - automatic - - - - - 0 - - - - - True - - - False - False - 1 - - - - - 2 - - - - - True - 2 - - - True - forms.xpm - - - 0 - - - - - True - Forms - - - False - False - 1 - - - - - 2 - False - tab - - - - - True - - - True - 10 - 0 - in - - - True - True - automatic - automatic - - - - - 0 - - - - - True - - - False - False - 1 - - - - - 3 - - - - - True - 2 - - - True - reports.xpm - - - 0 - - - - - True - Reports - - - False - False - 1 - - - - - 3 - False - tab - - - - - True - - - True - 10 - 0 - in - - - True - True - automatic - automatic - - - - - 0 - - - - - True - - - False - False - 1 - - - - - 4 - - - - - True - 2 - - - True - macros.xpm - - - 0 - - - - - True - Macros - - - False - False - 1 - - - - - 4 - False - tab - - - - - True - - - True - 10 - 0 - in - - - True - True - automatic - automatic - - - - - 0 - - - - - True - - - False - False - 1 - - - - - 5 - - - - - True - 2 - - - True - code.xpm - - - 0 - - - - - True - Modules - - - False - False - 1 - - - - - 5 - False - tab - - - - - 0 - - - - - - - True - True - - - - - True - 4 - True - True - - - 1 - True - True - - - - diff --git a/src/gmdb2/gmdb.bash-completion b/src/gmdb2/gmdb.bash-completion deleted file mode 100644 index 1e24333..0000000 --- a/src/gmdb2/gmdb.bash-completion +++ /dev/null @@ -1,12 +0,0 @@ -#-*- mode: shell-script;-*- -have gmdb2 && -_gmdb2() -{ - local cur - COMPREPLY=() - cur=${COMP_WORDS[COMP_CWORD]} - - _filedir '@(mdb|mdw|accdb)' - return 0 -} && -complete -F _gmdb2 gmdb2 diff --git a/src/gmdb2/gmdb.desktop b/src/gmdb2/gmdb.desktop deleted file mode 100644 index 2c4c914..0000000 --- a/src/gmdb2/gmdb.desktop +++ /dev/null @@ -1,13 +0,0 @@ -[Desktop Entry] -Type=Application -Version=1.0 -Name=MDB Viewer -Comment=View and export Microsoft Access databases -Keywords=Microsoft;Access;database;SQL;Jet;schema;query;mdb;accdb; -Icon=gmdb2 -TryExec=gmdb2 -Exec=gmdb2 %f -Terminal=false -MimeType=application/vnd.ms-access;application/x-msaccess;application/msaccess;application/vnd.msaccess;application/mdb;application/x-mdb; -Categories=Office; -StartupNotify=true diff --git a/src/gmdb2/gmdb.h b/src/gmdb2/gmdb.h deleted file mode 100644 index 78ca58a..0000000 --- a/src/gmdb2/gmdb.h +++ /dev/null @@ -1,101 +0,0 @@ -#ifndef _gmdb_h_ -#define _gmdb_h_ - -#include -#include -#include -#include -#include -#include -#include "mdbtools.h" -#include "mdbsql.h" - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* info.c */ -GtkWidget *gmdb_info_new(void); - -/* main2.c */ -void gmdb_info_cb(GtkWidget *w, gpointer data); -void gmdb_prefs_cb(GtkWidget *w, gpointer data); -void gmdb_help_cb(GtkWidget *w, gpointer data); -void gmdb_about_cb(GtkWidget *w, gpointer data); -void gmdb_load_recent_files(void); - -GtkWidget *gmdb_table_data_new(MdbCatalogEntry *entry); -GtkWidget *gmdb_table_export_new(MdbCatalogEntry *entry); -void gmdb_table_export(MdbCatalogEntry *entry) ; -void gmdb_table_export_populate_dialog(GladeXML *xml); - -/* table_def.c */ -void gmdb_table_def_new(MdbCatalogEntry *entry); - -/* file.c */ -void gmdb_file_select_cb(GtkWidget *w, gpointer data); -void gmdb_file_close_cb(GtkWidget *w, gpointer data); -void gmdb_file_open_recent_1(void); -void gmdb_file_open_recent_2(void); -void gmdb_file_open_recent_3(void); -void gmdb_file_open_recent_4(void); -void gmdb_file_open(gchar *file_path); - -void gmdb_sql_new_window_cb(GtkWidget *w, gpointer data); - -void gmdb_table_add_tab(GtkWidget *notebook); -void gmdb_debug_tab_new(GtkWidget *notebook); - -/* debug.c */ -void gmdb_debug_jump_cb(GtkWidget *w, gpointer data); -void gmdb_debug_jump_msb_cb(GtkWidget *w, gpointer data); -void gmdb_debug_display_cb(GtkWidget *w, gpointer data); -void gmdb_debug_close_cb(GtkWidget *w, gpointer data); -void gmdb_debug_forward_cb(GtkWidget *w, gpointer data); -void gmdb_debug_back_cb(GtkWidget *w, gpointer data); -void gmdb_debug_new_cb(GtkWidget *w, gpointer data); -void gmdb_debug_set_dissect_cb(GtkWidget *w, gpointer data); -void gmdb_debug_close_all(void); - -/* sql.c */ -void gmdb_sql_new_cb(GtkWidget *w, gpointer data); -void gmdb_sql_close_all(void); - -unsigned long gmdb_prefs_get_maxrows(void); - -extern GtkWidget *gmdb_prefs_new(void); - -/* schema.c */ -void gmdb_schema_new_cb(GtkWidget *w, gpointer data); -void gmdb_schema_export_cb(GtkWidget *w, gpointer data); -void gmdb_schema_help_cb(GtkWidget *w, gpointer data); - -/* table.c */ -void gmdb_table_debug_cb(GtkList *list, GtkWidget *w, gpointer data); -void gmdb_table_export_cb(GtkList *list, GtkWidget *w, gpointer data); -void gmdb_table_def_cb(GtkList *list, GtkWidget *w, gpointer data); -void gmdb_table_unselect_cb (GtkIconView*, gpointer); -void gmdb_table_select_cb (GtkIconView*, gpointer); -void gmdb_table_data_cb(GtkList *list, GtkWidget *w, gpointer data); -void gmdb_table_init_popup (GtkWidget*); -void gmdb_table_set_sensitive(gboolean b); - -/* table_export.c */ -void gmdb_export_get_delimiter(GladeXML *xml, gchar *delimiter, int max_buf); -void gmdb_export_get_lineterm(GladeXML *xml, gchar *lineterm, int max_buf); -void gmdb_export_get_quotechar(GladeXML *xml, gchar *quotechar, int max_buf); -void gmdb_export_get_escapechar(GladeXML *xml, gchar *escapechar, int max_buf); -int gmdb_export_get_binmode(GladeXML *xml); -int gmdb_export_get_headers(GladeXML *xml); -gchar *gmdb_export_get_filepath(GladeXML *xml); -void gmdb_export_help_cb(GtkWidget *w, gpointer data); -void gmdb_print_col(FILE *outfile, gchar *col_val, int quote_text, int col_type, int bin_len, char *quote_char, char *escape_char, int bin_mode); -void gmdb_table_export_button_cb(GtkWidget *w, gpointer data); - -extern MdbSQL *sql; - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#endif diff --git a/src/gmdb2/help/C/figures/gmdb2_sql_window.png b/src/gmdb2/help/C/figures/gmdb2_sql_window.png deleted file mode 100644 index 23873ab2ea06b0f303274510a9606b81d3706b18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46273 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%0D{DpYW<62e$0{5gm7Q{L#{D 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 diff --git a/src/gmdb2/help/C/gmdb.xml b/src/gmdb2/help/C/gmdb.xml deleted file mode 100644 index 4fac8f3..0000000 --- a/src/gmdb2/help/C/gmdb.xml +++ /dev/null @@ -1,432 +0,0 @@ - - - - - - -]> - - - -
- - - - &app; Manual V&manrevision; - - The &app; application is the graphical - interface to MDB Tools. You can use &app; - to view and export data and schema from MDB databases. - - - - 2003 - Brian Bruns - - - - MDB Tools Project - - &legal; - - - Brian - Bruns - - MDB Tools Project -
camber@ais.org
-
-
- - Jean-Michel - Vourgère - - MDB Tools Project -
contact_mdbtools@nirgal.com
-
-
- -
- - - - - - - - gmdb V0.5 - 2000 - - Brian Brunscamber@ais.org - - MDB Tools Project - - - - This manual describes version &appversion; of &app;. - - - Feedback - To report a bug or make a suggestion regarding this application or - this manual, follow the directions in this - document. - - -
- gmdb2 - - - - - Introduction - The &app; application is the graphical - interface to MDB Tools. You can use &app; - to view and export data and schema from MDB databases. - - - - - Getting Started - - - - To Start &app; from the Command Line - To start &app; from the command line, type the following command, then press Return: - gmdb2 - - -
- &app; Window - - - - - - Screenshot of the gmdb2 main window. - - -
- - The &app; window contains the following - elements: - - Menubar. - - The menus on the menubar contain all of the commands you need - to work with databases in &app;. - - - Toolbar. - - The toolbar contains a subset of the commands that you can - access from the menubar. - - - Tabbed window. - - -The tabbed window contains a tab for each type of object in the database. Within -these, a listing of those objects will be displayed along with buttons along the -left hand side for performing common actions specific to that type of object. - - - - Statusbar. - - The statusbar displays information about current - &app; activity and contextual information about the - menu items. - - - - -When you right-click on any icon in the &app; -icon list, the application displays a popup menu. The popup menu contains the -full list of available actions that may be performed on that object. - -
- - - To Open a File - To open a file, choose - File Open - - to display the Open File dialog. Select the file - that you want to open, then click OK. The file is - displayed in the &app; window. - The application also records the paths and file names of the last - four files that you edited and displays them as menu items on the File - menu. To open one of the last four files, choose for example - File 1. - /path/filename . - - - - To Open Files from a Command Line - You can run &app; from a command line - and open a file. To open a file from a command - line, type the following command, then press Return: - gmdb2 file1.mdb - When the application starts, the file that you specified is - displayed in the &app; window. - &app; uses the environment variable MDBPATH when looking for the specified file. If set &app;will search each directory component until the file is found. - -
- - - Usage - - - - To Display the Properties of a Database - To display the properties of a database, perform - the following steps: - - Choose - File Properties - - - - - To Export the Schema of a Database - To export the schema of the current database, - Choose Tools Export Schema and perform the following steps: - - Select the filename to save the schema in. - If you want to only export one table, select it. - Choose the SQL dialect of the target database backend. - Check desired schema options. - Click Export. - - Checking the Include Relationships box will generate foreign key relationships if they are supported by the database. - Checking the Include Drop Table commands will generate the commands to drop the tables before creating new tables. - - - - To Open a SQL Query Window - The SQL Query window allows you enter SQL queries and to execute and view the results. - To open the SQL Query window, perform the following steps. - - -Choose Tools SQL Window - - - - - - To Open a File Debugger Window - The File Debugger window allows you enter SQL queries and to execute and view the results. - - -Choose Tools Debug Window - - - - - - - Preferences - To view or set Preferences choose - Edit Preferences from the menu. - - Maximum Rows to Display - This option limits the number of rows that will be returned when - - Clicking the Data button on the Tables tab window, or - Running a SQL select in the Query Window - - - - By extension, this also affects the number of rows saved when saving the results of a SQL query. - - If no value is set, the default number of rows displayed is 1,000. This option may be disabled by setting the value to 0, but be warned that attempting to display a large number of rows will result in an increased delay proportional to the number of rows. - - - - - - Table Actions - To perform actions on a table choose the Tables tab from the main window. - - - Table Definition - To view the definition of a table, perform the following actions - - -Locate the desired table in the tables icon list. - - -Select the tables icon. - - -Click on the Definition button from the right hand side of the icon list. - - - -Columns participating in a Primary Key will have an icon of a gold key and the letters PK at the left side of the column. - - - - - Data View - The Data view displays a grid of the data in a table. - To display the table data, perform the following steps - - -Locate the desired table in the tables icon list. - - -Select the tables icon. - - -Click on the Data button from the right hand side of the icon list. - - - - - Data Export - The Export button creates a text file containing the data from a single table. - To export the table data, perform the following steps - - -Locate the desired table in the tables icon list. - - -Select the tables icon. - - -Click on the Export button from the right hand side of the icon list to display the Export Table window. - - - Select the filename to save the data in. - - - Fill in dialog with desired characteristics of the export file. - - - Click Export. - - - Checking the Include Headers box will write a single row at the top of the file with the names of the columns. - - - - Query Window - To open the SQL query window choose Tools SQL Window - -
- &app; Query Window - - - - - - Screenshot of the gmdb2 query window. - - -
- - The &app; Query window contains the following - elements: - - Menubar. - - The menus on the menubar contain all of the commands you need - to work with SQL queries and their results in &app;. - - - Toolbar. - - The toolbar contains a subset of the commands that you can - access from the menubar. - - - Table List. - - The table list contains a list of tables for the current database that can be dragged into the query editor. - - - Query Editor. - - The query editor is a text editing window where you can write your SQL select. - - - Recent Queries List. - - The recent queries list can be used to bring a previously run query back into the query editor. - - - Results Window. - - The results window shows the results of the last SQL query executed. - - - - - - To Open a New Query Window - To open a new query window, choose - Query New - - - - - - To Load a Query from a File - To load a query from a text file, choose - Query Open - - - - - - To Save a Query to a File - To save the current query to a text file, choose - Query Save - - - - The active file can be found in the title bar of the window. If this is not the desired file, choose the Save As menu item. - - - - - To Load a Query from a File - To load a query from a text file, choose - Query Open - - - -
-
diff --git a/src/gmdb2/help/C/legal.xml b/src/gmdb2/help/C/legal.xml deleted file mode 100644 index d6906f9..0000000 --- a/src/gmdb2/help/C/legal.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - Permission is granted to copy, distribute and/or modify this - document under the terms of the GNU Free Documentation - License (GFDL), Version 1.1 or any later version published - by the Free Software Foundation with no Invariant Sections, - no Front-Cover Texts, and no Back-Cover Texts. You can find - a copy of the GFDL at this link or in the file COPYING-DOCS - distributed with this manual. - - This manual is part of a collection of GNOME manuals - distributed under the GFDL. If you want to distribute this - manual separately from the collection, you can do so by - adding a copy of the license to the manual, as described in - section 6 of the license. - - - - Many of the names used by companies to distinguish their - products and services are claimed as trademarks. Where those - names appear in any GNOME documentation, and the members of - the GNOME Documentation Project are made aware of those - trademarks, then the names are in capital letters or initial - capital letters. - - - - DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED - UNDER THE TERMS OF THE GNU FREE DOCUMENTATION LICENSE - WITH THE FURTHER UNDERSTANDING THAT: - - - - DOCUMENT IS PROVIDED ON AN "AS IS" BASIS, - WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR - IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES - THAT THE DOCUMENT OR MODIFIED VERSION OF THE - DOCUMENT IS FREE OF DEFECTS MERCHANTABLE, FIT FOR - A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE - RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE - OF THE DOCUMENT OR MODIFIED VERSION OF THE - DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR - MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, - YOU (NOT THE INITIAL WRITER, AUTHOR OR ANY - CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY - SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER - OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS - LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED - VERSION OF THE DOCUMENT IS AUTHORIZED HEREUNDER - EXCEPT UNDER THIS DISCLAIMER; AND - - - - UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL - THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE), - CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, - INITIAL WRITER, ANY CONTRIBUTOR, OR ANY - DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION - OF THE DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH - PARTIES, BE LIABLE TO ANY PERSON FOR ANY - DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR - CONSEQUENTIAL DAMAGES OF ANY CHARACTER - INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS - OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR - MALFUNCTION, OR ANY AND ALL OTHER DAMAGES OR - LOSSES ARISING OUT OF OR RELATING TO USE OF THE - DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT, - EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF - THE POSSIBILITY OF SUCH DAMAGES. - - - - - - \ No newline at end of file diff --git a/src/gmdb2/help/Makefile.am b/src/gmdb2/help/Makefile.am deleted file mode 100644 index f2471f1..0000000 --- a/src/gmdb2/help/Makefile.am +++ /dev/null @@ -1,7 +0,0 @@ -include $(top_srcdir)/gnome-doc-utils.make -dist-hook: doc-dist-hook - -DOC_MODULE = gmdb -DOC_ENTITIES = legal.xml -DOC_FIGURES = figures/gmdb2_window.png figures/gmdb2_sql_window.png -#DOC_LINGUAS = es sr uk diff --git a/src/gmdb2/help/gmdb.omf.in b/src/gmdb2/help/gmdb.omf.in deleted file mode 100644 index 770ac1a..0000000 --- a/src/gmdb2/help/gmdb.omf.in +++ /dev/null @@ -1,10 +0,0 @@ - - - - - user's guide - - - - - diff --git a/src/gmdb2/info.c b/src/gmdb2/info.c deleted file mode 100644 index 7c55884..0000000 --- a/src/gmdb2/info.c +++ /dev/null @@ -1,127 +0,0 @@ -/* MDB Tools - A library for reading MS Access database file - * Copyright (C) 2000 Brian Bruns - * - * 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 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include "gmdb.h" - -extern GtkWidget *app; -extern MdbHandle *mdb; - -typedef struct GMdbInfoWindow { - GtkWidget *window; -} GMdbInfoWindow; - -GMdbInfoWindow *infow; - -/* callbacks */ -GtkWidget * -gmdb_info_new() -{ -GtkWidget *propswin, *label; -GladeXML *propswin_xml; -gchar title[100]; -gchar tmpstr[20]; -gchar *filename, *filepath; -int i; -struct stat st; -char* version; -MdbCatalogEntry *entry = mdb_get_catalogentry_by_name(mdb, "SummaryInfo"); - - /* load the interface */ - propswin_xml = glade_xml_new(GMDB_GLADEDIR "gmdb-props.glade", NULL, NULL); - /* connect the signals in the interface */ - glade_xml_signal_autoconnect(propswin_xml); - - filepath = g_strdup(mdb->f->filename); - for (i=strlen(filepath);i>0 && filepath[i-1]!='/';i--); - filename=&filepath[i]; - - propswin = glade_xml_get_widget (propswin_xml, "props_dialog"); - g_snprintf(title, 100, "%s Properties",filename); - gtk_window_set_title(GTK_WINDOW(propswin), title); - - label = glade_xml_get_widget (propswin_xml, "props_filename"); - gtk_label_set_text(GTK_LABEL(label), filename); - - label = glade_xml_get_widget (propswin_xml, "props_jetver"); - switch(mdb->f->jet_version) { - case MDB_VER_JET3: - version = "3 (Access 97)"; - break; - case MDB_VER_JET4: - version = "4 (Access 2000/XP/2003)"; - break; - case MDB_VER_ACCDB_2007: - version = "ACE 12 (Access 2007)"; - break; - case MDB_VER_ACCDB_2010: - version = "ACE 14 (Access 2010)"; - break; - case MDB_VER_ACCDB_2013: - version = "ACE 15 (Access 2013)"; - break; - case MDB_VER_ACCDB_2016: - version = "ACE 16 (Access 2016)"; - break; - default: - version = "Unknown"; - } - gtk_label_set_text(GTK_LABEL(label), version); - - label = glade_xml_get_widget (propswin_xml, "props_encrypted"); - gtk_label_set_text(GTK_LABEL(label), mdb->f->db_key ? "Yes" : "No"); - - assert( fstat(mdb->f->fd, &st)!=-1 ); - sprintf(tmpstr, "%zd K", (size_t)(st.st_size/1024)); - label = glade_xml_get_widget (propswin_xml, "props_filesize"); - gtk_label_set_text(GTK_LABEL(label), tmpstr); - - sprintf(tmpstr, "%zd", (size_t)(st.st_size / mdb->fmt->pg_size)); - label = glade_xml_get_widget (propswin_xml, "props_numpages"); - gtk_label_set_text(GTK_LABEL(label), tmpstr); - - sprintf(tmpstr, "%d", mdb->num_catalog); - label = glade_xml_get_widget (propswin_xml, "props_numobjs"); - gtk_label_set_text(GTK_LABEL(label), tmpstr); - - if (entry && entry->props && entry->props->len) - { - // There is only one MdbProps for that kind of entry - MdbProperties *props = g_array_index(entry->props, MdbProperties*, 0); - const char *propval; - - propval = g_hash_table_lookup(props->hash, "Title"); - if (propval) { - label = glade_xml_get_widget (propswin_xml, "props_title"); - gtk_label_set_text(GTK_LABEL(label), propval); - } - propval = g_hash_table_lookup(props->hash, "Company"); - if (propval) { - label = glade_xml_get_widget (propswin_xml, "props_company"); - gtk_label_set_text(GTK_LABEL(label), propval); - } - propval = g_hash_table_lookup(props->hash, "Author"); - if (propval) { - label = glade_xml_get_widget (propswin_xml, "props_author"); - gtk_label_set_text(GTK_LABEL(label), propval); - } - } - - g_free(filepath); - - return propswin; -} diff --git a/src/gmdb2/main2.c b/src/gmdb2/main2.c deleted file mode 100644 index 4a065ba..0000000 --- a/src/gmdb2/main2.c +++ /dev/null @@ -1,200 +0,0 @@ -/* MDB Tools - A library for reading MS Access database file - * Copyright (C) 2000-2004 Brian Bruns - * - * 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 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include -#include -#include -#include "mdbtools.h" -#include "mdbver.h" -#include "mdbsql.h" -#include "gmdb.h" - -GtkWidget *app; -GladeXML *mainwin_xml; -MdbSQL *sql; - -/* called when the user closes the window */ -static gint -delete_event(GtkWidget *widget, GdkEvent *event, gpointer data) -{ - /* signal the main loop to quit */ - gtk_main_quit(); - /* return FALSE to continue closing the window */ - return FALSE; -} - - -void -gmdb_about_cb(GtkWidget *button, gpointer data) -{ -const gchar *authors[] = { - "Brian Bruns", - "Jeff Smith", - "Filip Van Raemdonck", - "Bernhard Reiter", - "Nirgal Vourgère", - NULL -}; -const gchar *documenters[] = { - "Brian Bruns", - NULL -}; -GtkWidget *parent; -GdkPixbuf *pixbuf=NULL; -FILE *flicense; -guint32 licenselen; -char *license; - - parent = gtk_widget_get_toplevel (button); - if (!GTK_WIDGET_TOPLEVEL (parent)) - parent = NULL; - - if (!pixbuf) - pixbuf = gdk_pixbuf_new_from_file (GMDB_ICONDIR "logo.xpm", NULL); - - flicense = fopen(GMDB_ICONDIR "COPYING", "r"); - if (flicense) - { - fseek(flicense, 0, SEEK_END); - licenselen = ftell(flicense); - fseek(flicense, 0, SEEK_SET); - license = g_malloc(licenselen+1); - fread(license, 1, licenselen, flicense); - license[licenselen] = 0; - fclose(flicense); - } else { - fprintf(stderr, "Can't open " GMDB_ICONDIR "COPYING\n"); - license = NULL; - } - - gtk_show_about_dialog ((GtkWindow*)parent, - "authors", authors, - "comments", _("GNOME MDB Viewer is a grapical interface to " - "MDB Tools. It lets you view and export data and schema " - "from MDB files produced by MS Access 97/2000/XP/2003/2007/2010."), - "copyright", _("Copyright 2002-2012 Brian Bruns and others"), - "documenters", documenters, - "logo", pixbuf, - "program-name", _("GNOME MDB Viewer"), - "version", MDB_VERSION_NO, - "website", "http://mdbtools.sourceforge.net/", - "license", license, - NULL); - g_free(license); -} - -void -gmdb_prefs_cb(GtkWidget *button, gpointer data) -{ - gmdb_prefs_new(); -} -void -gmdb_info_cb(GtkWidget *button, gpointer data) -{ - gmdb_info_new(); -} - - -void -gmdb_help_cb(GtkWidget *button, gpointer data) -{ - GError *error = NULL; - - gnome_help_display("gmdb.xml", NULL, &error); - if (error != NULL) { - g_warning ("%s", error->message); - g_error_free (error); - } - -} - -void gmdb_load_recent_files() -{ -GtkWidget *menuitem; -GtkWidget *menulabel; -char menuname[100]; -char cfgname[100]; -int i; -gchar *text, *text2; - - for (i=4;i>=1;i--) { - sprintf(menuname, "menu_recent%d",i); - sprintf(cfgname, "/gmdb/RecentFiles/menu_recent%d.basename",i); - menuitem = glade_xml_get_widget (mainwin_xml, menuname); - menulabel = gtk_bin_get_child(GTK_BIN(menuitem)); - text = gnome_config_get_string(cfgname); - if (!text) { - gtk_widget_hide(menuitem); - } else { - text2 = g_malloc(strlen(text)+4); - sprintf(text2,"%d. %s",i,text); - gtk_label_set_text(GTK_LABEL(menulabel),text2); - gtk_widget_show(menuitem); - g_free(text2); - } - g_free(text); - } -} - -int main(int argc, char *argv[]) -{ -GtkWidget *gmdb; - -#ifdef SQL - /* initialize the SQL engine */ - sql = mdb_sql_init(); -#endif - - /* Initialize GNOME */ - /* Initialize gnome program */ - gnome_program_init ("gmdb", MDB_VERSION_NO, - LIBGNOMEUI_MODULE, argc, argv, - GNOME_PARAM_POPT_TABLE, NULL, - GNOME_PARAM_HUMAN_READABLE_NAME, - _("Gnome-MDB File Viewer"), - GNOME_PARAM_APP_DATADIR, DATADIR, - NULL); - //gnome_init ("gmdb", "0.2", argc, argv); - //app = gnome_app_new ("gmdb", "Gnome-MDB File Viewer"); - glade_init(); - - /* load the interface */ - mainwin_xml = glade_xml_new(GMDB_GLADEDIR "gmdb.glade", NULL, NULL); - /* connect the signals in the interface */ - glade_xml_signal_autoconnect(mainwin_xml); - - gmdb = glade_xml_get_widget (mainwin_xml, "gmdb"); - gtk_signal_connect (GTK_OBJECT (gmdb), "delete_event", - GTK_SIGNAL_FUNC (delete_event), NULL); - - if (argc>1) { - gmdb_file_open(argv[1]); - } - - gmdb_load_recent_files(); - - /* start the event loop */ - gtk_main(); - -#ifdef SQL - /* free MDB Tools library */ - mdb_sql_exit(sql); -#endif - - return 0; -} diff --git a/src/gmdb2/pixmaps/Makefile.am b/src/gmdb2/pixmaps/Makefile.am deleted file mode 100644 index e474d29..0000000 --- a/src/gmdb2/pixmaps/Makefile.am +++ /dev/null @@ -1,23 +0,0 @@ - -appicondir = $(datadir)/gmdb/glade - -appicon_DATA = \ - pk.xpm \ - logo.xpm \ - debug.xpm \ - table.xpm \ - query.xpm \ - forms.xpm \ - reports.xpm \ - macros.xpm \ - code.xpm \ - table_big.xpm \ - query_big.xpm \ - form_big.xpm \ - report_big.xpm \ - macro_big.xpm \ - module_big.xpm \ - stock_export.png \ - stock_export-16.png - -EXTRA_DIST = $(appicon_DATA) diff --git a/src/gmdb2/pixmaps/code.xpm b/src/gmdb2/pixmaps/code.xpm deleted file mode 100644 index 0432bf4..0000000 --- a/src/gmdb2/pixmaps/code.xpm +++ /dev/null @@ -1,22 +0,0 @@ -/* XPM */ -static char * code_xpm[] = { -"16 16 3 1", -" c None", -". c #000000", -"+ c #777777", -" ", -" ", -" .. ", -" .++. ", -" . . . ", -" . .. ..", -" . .+ +.", -".... . .+ +. .", -" . . .+. .", -" . .+ +.+ +.", -" . .. +. .+ ..", -" . . . . . ", -" ", -" ", -" ", -" "}; diff --git a/src/gmdb2/pixmaps/debug.xpm b/src/gmdb2/pixmaps/debug.xpm deleted file mode 100644 index dcec39c..0000000 --- a/src/gmdb2/pixmaps/debug.xpm +++ /dev/null @@ -1,23 +0,0 @@ -/* XPM */ -static char * debug_xpm[] = { -"16 16 4 1", -" c None", -". c #ED2D2D", -"+ c #635757", -"@ c #000000", -" ", -" ..... ", -" ... ... ", -" .. +@+ .. ", -" .... @@@ .. ", -" .@+..+@+ +@. ", -".. @+..@@ +@ .. ", -". @@..@@@ . ", -". @@..@ . ", -". @@@@@@..@@@ . ", -".. @@@@.. .. ", -" . @@@@@@.. . ", -" ..@+ @@@ +... ", -" .. .. ", -" ... ... ", -" ..... "}; diff --git a/src/gmdb2/pixmaps/form_big.xpm b/src/gmdb2/pixmaps/form_big.xpm deleted file mode 100644 index 2200b20..0000000 --- a/src/gmdb2/pixmaps/form_big.xpm +++ /dev/null @@ -1,234 +0,0 @@ -/* XPM */ -static char * form_big_xpm[] = { -"20 20 211 2", -" c None", -". c #585858", -"+ c #635C56", -"@ c #B97943", -"# c #EAB476", -"$ c #747474", -"% c #808080", -"& c #707070", -"* c #645C55", -"= c #816751", -"- c #CB8E57", -"; c #F0AE62", -"> c #B6B6B6", -", c #E0E0E0", -"' c #E1E1E1", -") c #DFDFDF", -"! c #DEDEDE", -"~ c #DAD4CE", -"{ c #CD894D", -"] c #F5BA7A", -"^ c #FD9D2E", -"/ c #EDEDED", -"( c #FCFCFC", -"_ c #E7E7E7", -": c #DDDDDD", -"< c #CAA88C", -"[ c #D39155", -"} c #F5BA77", -"| c #FD9325", -"1 c #FE8A09", -"2 c #EEEEEE", -"3 c #FFFFFF", -"4 c #E8E8E8", -"5 c #FDFDFD", -"6 c #FDFCFB", -"7 c #EFE5DC", -"8 c #D2AB8C", -"9 c #D8A371", -"0 c #EFAB63", -"a c #FC9930", -"b c #FE8A0B", -"c c #F58104", -"d c #E6E6E6", -"e c #E3E3E3", -"f c #FAF8F5", -"g c #EFE5DB", -"h c #D7AF8E", -"i c #DBA470", -"j c #EDA45A", -"k c #FC9E39", -"l c #FC8709", -"m c #F28004", -"n c #D56C04", -"o c #EBE8E7", -"p c #F1E4DB", -"q c #E0BEA2", -"r c #D4965F", -"s c #EFAA61", -"t c #FC9D38", -"u c #FB8508", -"v c #F27F03", -"w c #D46C04", -"x c #954803", -"y c #E9E9E9", -"z c #E6DDD8", -"A c #E6C6B1", -"B c #DB9B6B", -"C c #F4BC85", -"D c #FC962D", -"E c #FC8505", -"F c #D66D04", -"G c #9D4A04", -"H c #431F02", -"I c #F1F1F1", -"J c #EFE1D7", -"K c #F5D7C2", -"L c #F9D3B8", -"M c #EE9E6E", -"N c #F68725", -"O c #F07D06", -"P c #D36C03", -"Q c #9B4904", -"R c #3A1B02", -"S c #EAD1C2", -"T c #F3D4BC", -"U c #F9D7BD", -"V c #F2BB9B", -"W c #DD8154", -"X c #DB712A", -"Y c #C86312", -"Z c #944806", -"` c #472102", -" . c #EFEFEF", -".. c #E2E1DD", -"+. c #E9CBB6", -"@. c #F6CFB2", -"#. c #F4C7A8", -"$. c #D79371", -"%. c #B2673D", -"&. c #9D5A2F", -"*. c #7C421A", -"=. c #51290E", -"-. c #2A2019", -";. c #FCFAF8", -">. c #EAD7C9", -",. c #EECFB7", -"'. c #F0C3A5", -"). c #DCA282", -"!. c #AB6D4D", -"~. c #754D2D", -"{. c #5D4733", -"]. c #544234", -"^. c #483A31", -"/. c #303030", -"(. c #FBFBFA", -"_. c #F8F1EC", -":. c #E7B598", -"<. c #ECBB9D", -"[. c #D49B7C", -"}. c #A86C4C", -"|. c #785037", -"1. c #463D32", -"2. c #4C4946", -"3. c #877D6F", -"4. c #928673", -"5. c #E1DDD9", -"6. c #D8CCBC", -"7. c #9B8770", -"8. c #A47A5F", -"9. c #825C46", -"0. c #5A473B", -"a. c #66605B", -"b. c #9D9C99", -"c. c #A5A5A3", -"d. c #B1A797", -"e. c #92846F", -"f. c #E8E6E5", -"g. c #DFD9D1", -"h. c #A69A88", -"i. c #474034", -"j. c #5D4E43", -"k. c #796B62", -"l. c #8F8981", -"m. c #A9A5A0", -"n. c #C9C6C4", -"o. c #D5CBBC", -"p. c #CAB99F", -"q. c #92836D", -"r. c #E4DED6", -"s. c #CDC2B1", -"t. c #857A6A", -"u. c #605A50", -"v. c #7B746B", -"w. c #A7A094", -"x. c #CCC2B3", -"y. c #D9CDBD", -"z. c #E1D5C5", -"A. c #E6D4BA", -"B. c #D2BC9C", -"C. c #928269", -"D. c #E0D9CD", -"E. c #CCBFA9", -"F. c #9C9383", -"G. c #B2A99B", -"H. c #C5BAAA", -"I. c #DDCFBA", -"J. c #EDDCC3", -"K. c #EBD8BD", -"L. c #E9D5B7", -"M. c #E7D1B0", -"N. c #D1B995", -"O. c #928066", -"P. c #B4B4B3", -"Q. c #E5E2DB", -"R. c #EFE7DA", -"S. c #EDE3D3", -"T. c #ECE0CC", -"U. c #EADBC6", -"V. c #E9D8BF", -"W. c #E7D4B8", -"X. c #E5D1B2", -"Y. c #E3CDAC", -"Z. c #E2C9A5", -"`. c #CEB48D", -" + c #927F62", -".+ c #A7A49D", -"++ c #C9C5BA", -"@+ c #CAC4B7", -"#+ c #C8C1B0", -"$+ c #C8BDA8", -"%+ c #C7B9A1", -"&+ c #C5B59A", -"*+ c #C4B293", -"=+ c #C3AE8C", -"-+ c #C2AA85", -";+ c #C1A67E", -">+ c #BEA177", -",+ c #927D5F", -"'+ c #5B5A58", -")+ c #5D5B58", -"!+ c #5D5B57", -"~+ c #5C5A55", -"{+ c #5C5953", -"]+ c #5C5851", -"^+ c #5B574E", -"/+ c #5B564C", -"(+ c #5B544A", -"_+ c #5B5348", -":+ c #5A5246", -"<+ c #5A5145", -"[+ c #4D473E", -" . . . . . . . . . . . . . . + @ # ", -" . $ % % % % % % % % % % & * = - ; ", -" . > , ' ' ' ) , ' ' ' ! ~ { ] ^ ", -" . > / ( ( ( _ / ( ( ( : < [ } | 1 ", -" . > 2 3 3 3 4 / 5 6 7 8 9 0 a b c ", -" . > d 2 2 2 e / f g h i j k l m n ", -" . > e 4 4 4 ' o p q r s t u v w x ", -" . > 2 3 3 3 y z A B C D E m F G H ", -" . > 2 3 3 3 I J K L M N O P Q R ", -" . > e 4 4 4 S T U V W X Y Z ` ", -" . > d ./ ..+.@.#.$.%.&.*.=.-. ", -" . > 2 3 ;.>.,.'.).!.~.{.].^./. ", -" . > / (._.:.<.[.}.|.1.2.3.4./. ", -" . > , 5.6.7.8.9.0.a.b.c.d.e./. ", -" . > f.g.h.i.j.k.l.m.n.o.p.q./. ", -" . > r.s.t.u.v.w.x.y.z.A.B.C./. ", -" . > D.E.F.G.H.I.J.K.L.M.N.O./. ", -" . P.Q.R.S.T.U.V.W.X.Y.Z.`. +/. ", -" . .+++@+#+$+%+&+*+=+-+;+>+,+/. ", -" . '+)+!+~+{+]+^+/+(+_+:+<+[+/. "}; diff --git a/src/gmdb2/pixmaps/forms.xpm b/src/gmdb2/pixmaps/forms.xpm deleted file mode 100644 index a7c32ae..0000000 --- a/src/gmdb2/pixmaps/forms.xpm +++ /dev/null @@ -1,126 +0,0 @@ -/* XPM */ -static char * forms_xpm[] = { -"16 16 107 2", -" c None", -". c #585858", -"+ c #C47D41", -"@ c #FACB8D", -"# c #DEDEDE", -"$ c #C37B40", -"% c #FAC78C", -"& c #FE8F0C", -"* c #FFFFFF", -"= c #CECECE", -"- c #FAC689", -"; c #FE880E", -"> c #FE8801", -", c #FCFCFC", -"' c #FEFEFE", -") c #E5D6C8", -"! c #FAC98F", -"~ c #FD8810", -"{ c #FE8803", -"] c #EC7A03", -"^ c #FDFDFD", -"/ c #E7DACC", -"( c #FD850C", -"_ c #FE8703", -": c #E47604", -"< c #A54E04", -"[ c #ECDAD2", -"} c #D38F5D", -"| c #F8C58D", -"1 c #FE8406", -"2 c #FE8804", -"3 c #A34C04", -"4 c #1C0C01", -"5 c #EDEDED", -"6 c #F4D6C1", -"7 c #FFE2CD", -"8 c #EB9260", -"9 c #FA800A", -"0 c #E47702", -"a c #A04A04", -"b c #210F01", -"c c #DFDFDF", -"d c #EBB698", -"e c #FEE5CA", -"f c #F1B492", -"g c #D37043", -"h c #CF6524", -"i c #A04B0A", -"j c #231001", -"k c #E4E0D8", -"l c #EFD0B5", -"m c #FFD1B1", -"n c #C67E5D", -"o c #87542B", -"p c #5C4733", -"q c #241008", -"r c #303030", -"s c #FDFDFC", -"t c #EFB493", -"u c #F7C9AC", -"v c #C67D5A", -"w c #825234", -"x c #332E23", -"y c #474544", -"z c #BCAB90", -"A c #DCD0BF", -"B c #897862", -"C c #A36F52", -"D c #4C392C", -"E c #5B5957", -"F c #B0B0AF", -"G c #BCA88A", -"H c #FAF6F2", -"I c #A09380", -"J c #1A1812", -"K c #534F4C", -"L c #9F9C96", -"M c #C4BFB9", -"N c #DAD6D3", -"O c #E9D6BA", -"P c #BCA685", -"Q c #DAC8AB", -"R c #736A5A", -"S c #9C9488", -"T c #BDB4A4", -"U c #EEDFC8", -"V c #ECDAC0", -"W c #E9D6B9", -"X c #E7D1B0", -"Y c #BCA37F", -"Z c #F4EDE1", -"` c #F2E8D8", -" . c #F0E4D0", -".. c #EEDEC8", -"+. c #ECDABF", -"@. c #E9D6B8", -"#. c #E5CCA7", -"$. c #BCA178", -"%. c #C6C1B6", -"&. c #C4BDAC", -"*. c #C3B8A3", -"=. c #C2B39A", -"-. c #C0AF91", -";. c #BFAA88", -">. c #BEA57F", -",. c #BDA076", -"'. c #BC9E73", -" . . . . . . . . . . . . + @ ", -" . # # # # # # # # # $ % & ", -" . # * * * # * * * = $ - ; > ", -" . # * * * # , ' ) $ ! ~ { ] ", -" . # # # # # ^ / $ ! ( _ : < ", -" . # * * * # [ } | 1 2 : 3 4 ", -" . # * * * 5 6 7 8 9 0 a b ", -" . c # # # d e f g h i j ", -" . # * * k l m n o p q r ", -" . # * s t u v w x y z r ", -" . # # A B C D E F F G r ", -" . # H I J K L M N O P r ", -" . # Q R S T U V W X Y r ", -" . # Z ` ...+.@.X #.$.r ", -" . %.%.&.*.=.-.;.>.,.'.r ", -" . r r r r r r r r r r r "}; diff --git a/src/gmdb2/pixmaps/logo.xpm b/src/gmdb2/pixmaps/logo.xpm deleted file mode 100644 index 77ca296..0000000 --- a/src/gmdb2/pixmaps/logo.xpm +++ /dev/null @@ -1,92 +0,0 @@ -/* XPM */ -static char * logo_xpm[] = { -"93 73 16 1", -" c None", -". c #B2B2B2", -"+ c #C2C2C2", -"@ c #848484", -"# c #929292", -"$ c #FFFC10", -"% c #E2E2E2", -"& c #D2D2D2", -"* c #A2A2A2", -"= c #6D6D6D", -"- c #3A3A3A", -"; c #F3F164", -"> c #FFFFFF", -", c #F4F4F4", -"' c #ECEB95", -") c #FAF86B", -" + ", -" .#+#. ", -" +@.$$$.@+ ", -" +**%$$$$$@-#+ ", -" *#&$$$$$+=*.-=. ", -" +#+$$$$$%#@&$$=-@+", -" +#.$$$$$%*=+$$+=#@*+", -" +**%$$$$$.=*$$&#@&#** ", -" **&$$$$$+=*$$$##*==*+* ", -" +=+$$$$$%@=$>).=*#-+,&=+ ", -" +**$$$$$%*=.>>+#@*#-#>.@+ ", -" +#*%$$$$$.=.$$&@#*@*+=>.# ", -" .*&$$$$$&=#;$$*@*#@'$=%&@ ", -" +@+$$$$$%@@;$$.=**@&$$**,#+ ", -" +#.$$$$$$*=.$$+##*@.,&$&=,.. ", -" +#.%$$$$$.=.$$;@#*@.%&@#=-&%@ ", -" .@&$$$$$&=#$$$*=.#@'$@@%%==*=+ ", -" .*.$$$$$&#@&$$.##*@.$$@-*.#+ ++ ", -" ++ +@*$$$$$$#=.$$+=##@*$$$+@,-. ", -" +****#* *#&$$$$$.=*$$;@@*@#'$$+.=,+* ", -" +***#@*%+-. .@+$$$$$&@#$$;*=.*=&$$'@##-*# ", -" +.*#------+.-*+ +=@+ +#.$$$$$%#@+$$.@#.=-@#+*=&,.##+ ", -" .**--*%$$$*-&*=-=.@#.*.#.%$$$$$#=+$$+=**@==+%*---##+ ", -" +@.=-@$$$$$$$@->+.%$..%==%$$$$$+=*$$;#@.@*+-#&#. +## ", -" +**@--&$$$$$$$$&-%$$$$*-@+$$$$$&##&$$*@###&,=%@=+ ", -" **#--.$$$$$$$$$$$-+$$$$%.$$$$$$@=+$$.@*#@+$$**>#+ ", -" .*.=-#$$$$$$$$$$$$$=+$$$$$$$$$$.=.$$'##.@*$$$%=,.. ", -" +#.=-=$$$$$$$$$$$$$$$=+$$$$$$$$+=#$$'#@.@@$$$$$=+,@ ", -" .#@--&$$$$$$$$$$$$$$$$-+$$$$$$&@@&$$*@##@+$$$$&@=#@+ ", -" ##--.$$.-*$$$$$$$$$$$$$-.$$$$$@@$$$.=*#@+$$$$$#@&%-# ", -" *#-@$$&@#+#$$$$$$$$$$$$$=.$$$+=.$$'@#.@*$$$$$$#-.+@+ ", -" *@-*$$#@&$&#$$$$$$$$$$$$$=.$$#@'$&#####%$$$$$$+@,-* ", -" +=-.$*=+$$$+@$$$$$$$$$$$$$=+%=*$'@@.##&$$$$$$$$@%&* ", -" @-@$##$$$$*=@$$$$$$$$$$$$$===+&#=..@.$$$$$$$$$@@,*+ ", -" .=-$*@$$$+=++#$$$$$$$$$$$$+--#@#++@*$$$$$$$$$*@@-=. ", -" +@-&&=$$$+=+ +#$$$$$$$$$$$*-=.+&.@#%$$$$$$$$+=.,+@* ", -" *-=$@;$$&= +#$$$$$$$$$$%=%,*==+%$$$$$$$$$*--*#+ ", -" +@-&$#*;$=+ +#$$$$$$$$$$$==-#+#$$$$$$$$$+=*,-- ", -" +--$$$*#=* +#$$$$$$$$$$$+*-+&#$$$$$$$+@#%+*. ", -" *-#$$$$$*=. +#$$$$$$$$$$$$$-.&#$$$$$%@@&,#*+ ", -" +=-&$$$$$$$*@+ +@$$$$$$$$$$$$$-.&@$$$+*=+%.#+ ", -" *-=$$$$$$$$$%##*#$$$$$$$$$$$$$-*&#$+=--*+#+ ", -" @-.$$$$$$$$$$$+#$$$$$$$$$$$$$$-.&-@#&@'*-+ ", -" .@-$+=.$$$$$$$$$$$$$$$$$$$$$$$$-.$@&$$@$$*+ ", -" *-@$=%#@&$$$$$$$$$$$$$$$$$$$$$$-*$$$$'=+$.+ ", -" +#-'.#$$+-@+$$$$$$$$$$$$$$$$$$$$-*$$$.=*@*#+ ", -" +--$@&$$*++##%$$$$$$$$$$$$$$$$$$-*$$=#%$$.-+ ", -" #-.&@$$%# +=$$$$$$$$$$$$$$$$$$-*$=+$$$+#. ", -" +=-'*.$$.. +@$$$*.$$$$$$$$$$$$$-.#*$$$.# ", -" #-@$@$$$#+ @&$$+=@$$$$$$$$$$$$$-#@$$$.* ", -" +=-&&@$$&@ .*$$$=&#$$$$$$$$$$$$+-=&$$+# ", -" .=-$#+$$*+ @%$$*.%#$$$$$$$$$$$$#-@$$$@+ ", -" .-@$=$$$= .+$$%=$%#$$$$$$$$$$$$--.$$.* ", -" .-.$@$$+* +@$$$#.$%#$$$$$$$$$$$+-=%$$#+ ", -"+*-''@$$*+ @+$$&@$$%@$$$$$$$$$$%-=*$$%# ", -"+@-$$=$$@+ +#$$$@&$$+-$$$$$$$$$$@-=%$$.+ ", -"+#-%$#.$#+ #%$$.#$$$==$$$$$$$$$+-=.$$%# ", -"+*-+$$=%*+.*$$$=$$$.##$$$$$$$$%-=@$$$*+ ", -"+.-=$$+=%==%$$#*$$$@ #%$$$$$$+-==$$$+@ ", -" .+-&$$##-.$$&@$$$*+ #%$$$$$@-==%$$%@ ", -" *+=-$$$@#$$$#+$$&# #$$$$+--@=%$$$#+ ", -" @%-=$$$$$$&=$$$@+ =.$$%=-@@@$$$$#+ ", -" +*&-*$$$$$=%$$+=.@'$$@--*@*$$$&@+ ", -" *+*-%$$$.*$$$-=+$$*--@#*%$$$.#+ ", -" @%=-$$$*@+#=*$$&--#@@%$$$+@. ", -" +#%-=$$$*@*$$'@-=*=.$$$&.#+ ", -" +.&-.$$$$$$@-=#@*$$$$*#+ ", -" *+*-*$$$*--#@#%$$$+@+ ", -" @&*-----##@&$$$&#. ", -" +@+%+*.*@.$$$%.#+ ", -" +*==.*.$$$$.*+ ", -" +@#&$$$.@+ ", -" +####. "}; diff --git a/src/gmdb2/pixmaps/macro_big.xpm b/src/gmdb2/pixmaps/macro_big.xpm deleted file mode 100644 index 536ba84..0000000 --- a/src/gmdb2/pixmaps/macro_big.xpm +++ /dev/null @@ -1,263 +0,0 @@ -/* XPM */ -static char * macro_big_xpm[] = { -"20 20 240 2", -" c None", -". c #564F44", -"+ c #554D42", -"@ c #544C42", -"# c #585148", -"$ c #786F60", -"% c #7B7162", -"& c #756A5C", -"* c #756B5E", -"= c #635B4E", -"- c #695F51", -"; c #665C50", -"> c #625B4F", -", c #857A69", -"' c #8A7E6C", -") c #867968", -"! c #807565", -"~ c #817666", -"{ c #70685C", -"] c #7A7062", -"^ c #9B8C77", -"/ c #8E816E", -"( c #877B69", -"_ c #928470", -": c #B09E86", -"< c #A5957E", -"[ c #897B69", -"} c #B2A188", -"| c #BFAC91", -"1 c #B5A38A", -"2 c #8E806D", -"3 c #998A74", -"4 c #A0907A", -"5 c #9A8A75", -"6 c #6E6558", -"7 c #807465", -"8 c #BCA990", -"9 c #A89781", -"0 c #9D8E79", -"a c #B3A189", -"b c #CAB69A", -"c c #BCA98F", -"d c #9C8C78", -"e c #C0AD92", -"f c #CEB99C", -"g c #C6B397", -"h c #9D8E78", -"i c #AC9B83", -"j c #B8A68C", -"k c #B6A38A", -"l c #938674", -"m c #6D6356", -"n c #847767", -"o c #D4BEA1", -"p c #BBA88F", -"q c #AC9B84", -"r c #C2B095", -"s c #D6C1A3", -"t c #C8B499", -"u c #AB9A83", -"v c #C7B398", -"w c #CEBA9D", -"x c #C5B196", -"y c #A4947E", -"z c #AF9E85", -"A c #B8A58C", -"B c #908371", -"C c #807667", -"D c #6E6456", -"E c #857867", -"F c #D6BFA2", -"G c #BFAB92", -"H c #AF9E86", -"I c #BFAD93", -"J c #D7C1A4", -"K c #D0BB9E", -"L c #B9A78D", -"M c #CDB99D", -"N c #C4B096", -"O c #9E8E78", -"P c #9C8D76", -"Q c #92836F", -"R c #8C7E6B", -"S c #897C69", -"T c #8A7C69", -"U c #645A4E", -"V c #7C7061", -"W c #D3BDA0", -"X c #B5A28A", -"Y c #B2A088", -"Z c #D5BFA1", -"` c #D1BC9E", -" . c #B6A48B", -".. c #C8B498", -"+. c #B1A087", -"@. c #998B75", -"#. c #A99980", -"$. c #BFAC90", -"%. c #CBB799", -"&. c #C9B599", -"*. c #BAA88F", -"=. c #827665", -"-. c #5D554A", -";. c #74695B", -">. c #C5B297", -",. c #978873", -"'. c #CCB89B", -"). c #B6A48A", -"!. c #C4B195", -"~. c #B09F86", -"{. c #998A75", -"]. c #9B8C76", -"^. c #B3A288", -"/. c #C2AF93", -"(. c #C1AE93", -"_. c #D6C1A4", -":. c #DEC8AA", -"<. c #D2BDA0", -"[. c #887B69", -"}. c #5C554B", -"|. c #6F6659", -"1. c #B3A289", -"2. c #A89880", -"3. c #988974", -"4. c #BEAB90", -"5. c #C5B296", -"6. c #B5A489", -"7. c #C0AD91", -"8. c #A2927C", -"9. c #7F7362", -"0. c #8D806C", -"a. c #938570", -"b. c #E0C9AA", -"c. c #DAC4A6", -"d. c #948570", -"e. c #6F675B", -"f. c #7E7364", -"g. c #BAA78D", -"h. c #B7A48B", -"i. c #AB9A82", -"j. c #AA9981", -"k. c #AD9C83", -"l. c #B4A187", -"m. c #B6A289", -"n. c #9E8D77", -"o. c #857865", -"p. c #847664", -"q. c #AA9982", -"r. c #A7977F", -"s. c #D0BC9E", -"t. c #E3CCAC", -"u. c #DDC7A8", -"v. c #A6957D", -"w. c #776D5E", -"x. c #887C6A", -"y. c #C4B094", -"z. c #D2BC9F", -"A. c #CBB79A", -"B. c #C3B094", -"C. c #C4B095", -"D. c #CBB69A", -"E. c #C9B498", -"F. c #B2A087", -"G. c #A1917B", -"H. c #C1AD93", -"I. c #C9B598", -"J. c #DCC6A7", -"K. c #E4CEAD", -"L. c #A1917A", -"M. c #766C5C", -"N. c #8B7E6B", -"O. c #D5C0A1", -"P. c #E5CEAE", -"Q. c #E5CDAD", -"R. c #E2CCAC", -"S. c #E2CCAD", -"T. c #E4CDAE", -"U. c #E0C9AB", -"V. c #D3BEA1", -"W. c #E1CBAB", -"X. c #D3BEA0", -"Y. c #90826E", -"Z. c #6C6355", -"`. c #817664", -" + c #DFC9A9", -".+ c #E2CBAC", -"++ c #E4CDAD", -"@+ c #756B5C", -"#+ c #897D6A", -"$+ c #B6A58B", -"%+ c #E4CEAE", -"&+ c #D5BFA2", -"*+ c #B7A58C", -"=+ c #928571", -"-+ c #73695B", -";+ c #9E8F79", -">+ c #C3B095", -",+ c #DEC8A9", -"'+ c #DBC5A7", -")+ c #CDB99C", -"!+ c #B3A188", -"~+ c #988A76", -"{+ c #786E5F", -"]+ c #867A6A", -"^+ c #AE9E86", -"/+ c #D1BD9F", -"(+ c #E1CAAA", -"_+ c #DFC8A8", -":+ c #E4CCAC", -"<+ c #9A8C77", -"[+ c #7B6F60", -"}+ c #8F8370", -"|+ c #A69880", -"1+ c #D8C3A4", -"2+ c #DEC8A8", -"3+ c #E4CCAD", -"4+ c #E5CDAE", -"5+ c #E3CDAC", -"6+ c #A5957F", -"7+ c #6B6456", -"8+ c #897D6B", -"9+ c #CEBA9C", -"0+ c #E2CBAB", -"a+ c #90826F", -"b+ c #585249", -"c+ c #796F61", -"d+ c #C6B297", -"e+ c #E5CEAF", -"f+ c #E3CDAD", -"g+ c #E0CAAB", -"h+ c #B09F88", -"i+ c #908270", -"j+ c #645D53", -"k+ c #817768", -"l+ c #C6B398", -"m+ c #E3CEAE", -"n+ c #E2CDAE", -"o+ c #E1CBAD", -"p+ c #BAA890", -"q+ c #A0927D", -" . + @ # $ % & * * ", -" = - ; > , ' ) ! ~ ", -"{ ] ^ / ( _ : < [ } | 1 2 3 4 5 ", -"6 7 8 9 0 a b c d e f g h i j k l ", -"m n o p q r s t u v w x y z j A B C ", -"D E F G H I J K L M N H O P 3 Q R S T ", -"U V W X 4 Y Z ` ...+.@.#.$.%.&.t x *.=.", -"-.;.>.i ,.4 '.f ).!.~.{.].^./.(._.:.<.[.", -"}.|.1.2.3.Q 4.5.6.7.j 8.9.0.3.a.v 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.b I.J.K.J.L.", -"M.N.O.t.P.Q.R.S.T.U.V.'.u.t.P.P.P.W.X.Y.", -"Z.`.A. +P.P.P.P.P.T.t..+++P.P.P.++s L @+", -" #+$+V.%+P.P.P.P.P.P.P.P.P.P.++&+*+=+-+", -" ;+>+,+P.++t.t.++P.P.P.R.'+)+!+~+{+ ", -" ]+^+/+++(+_+_+t.:+t.P.u.>.<+[+m ", -" }+|+1+2+b.b.3+4+++5+| 6+ ", -" 7+8+9+J..+.+T.P.++0++.a+ ", -" b+c+d+J.P.P.e+%+f+g+h+i+ ", -" j+k+l+J.P.P.%+m+n+o+p+q+ "}; diff --git a/src/gmdb2/pixmaps/macros.xpm b/src/gmdb2/pixmaps/macros.xpm deleted file mode 100644 index b4b72a4..0000000 --- a/src/gmdb2/pixmaps/macros.xpm +++ /dev/null @@ -1,137 +0,0 @@ -/* XPM */ -static char * macros_xpm[] = { -"14 14 120 2", -" c None", -". c #564F44", -"+ c #554C41", -"@ c #534D44", -"# c #817867", -"$ c #756A5C", -"% c #756B5E", -"& c #70685C", -"* c #A0907A", -"= c #827766", -"- c #998A75", -"; c #C8B498", -"> c #887A68", -", c #C5B195", -"' c #887B68", -") c #A8977F", -"! c #9A8A75", -"~ c #6D6356", -"{ c #DEC7A9", -"] c #A0907B", -"^ c #C4B196", -"/ c #DDC7A8", -"( c #A1917C", -"_ c #CDB99C", -": c #D9C3A5", -"< c #A2927C", -"[ c #C5B296", -"} c #7A7165", -"| c #6E6456", -"1 c #E1C9AB", -"2 c #A89781", -"3 c #BFAD93", -"4 c #E1CAAB", -"5 c #B6A48B", -"6 c #D3BEA1", -"7 c #B4A38A", -"8 c #9B8C76", -"9 c #9C8D76", -"0 c #92836F", -"a c #897C69", -"b c #8A7C69", -"c c #5F564B", -"d c #AC9A83", -"e c #E5CEAD", -"f c #B3A188", -"g c #CBB79A", -"h c #877A67", -"i c #B3A287", -"j c #E0C9A9", -"k c #E1CBAB", -"l c #E2CBAD", -"m c #D8C2A5", -"n c #6B6255", -"o c #595349", -"p c #BDAB90", -"q c #968772", -"r c #8F806C", -"s c #D6C1A3", -"t c #B4A388", -"u c #C5B295", -"v c #B2A088", -"w c #796D5D", -"x c #978973", -"y c #90826E", -"z c #DCC6A8", -"A c #E4CDAD", -"B c #7D705F", -"C c #756C5F", -"D c #B6A48A", -"E c #C5B196", -"F c #B2A188", -"G c #9E8F78", -"H c #B3A087", -"I c #B39F86", -"J c #7A6E5D", -"K c #867866", -"L c #B09F87", -"M c #AD9C83", -"N c #E3CDAC", -"O c #E5CEAE", -"P c #9D8C76", -"Q c #796E5E", -"R c #E3CCAA", -"S c #E5CDAD", -"T c #E0CAAB", -"U c #E4CDAE", -"V c #DDC7A9", -"W c #C0AD92", -"X c #DEC8A9", -"Y c #847764", -"Z c #6B6254", -"` c #D4BFA1", -" . c #E3CCAD", -".. c #BFAC91", -"+. c #5E574C", -"@. c #A89880", -"#. c #E3CDAD", -"$. c #E3CCAC", -"%. c #786E5F", -"&. c #867A6A", -"*. c #C9B699", -"=. c #DEC7A7", -"-. c #D7C2A4", -";. c #9A8C77", -">. c #797060", -",. c #D3BFA0", -"'. c #E0C9AA", -"). c #E5CDAE", -"!. c #E2CCAB", -"~. c #928470", -"{. c #565148", -"]. c #C6B297", -"^. c #E5CEAF", -"/. c #E4CEAE", -"(. c #8E806E", -"_. c #676056", -":. c #C6B398", -"<. c #E2CDAE", -"[. c #E1CBAD", -"}. c #A49681", -" . + @ # $ % ", -"& * = - ; > , ; ' ) ! ", -"~ { ] ^ / ( _ : < [ ; } ", -"| 1 2 3 4 5 6 7 8 9 0 a b ", -"c { 0 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 O S T U V W X O O O A Y ", -"Z ` O O O O O O O O O ...+.", -" @.#.O O O O O O O $.W %. ", -" &.*.A j =.A $.O -.;.~ ", -" >.,.4 '.).O !.~. ", -" {.].O O ^./.T (. ", -" _.:.O O /.<.[.}. "}; diff --git a/src/gmdb2/pixmaps/module_big.xpm b/src/gmdb2/pixmaps/module_big.xpm deleted file mode 100644 index 893971b..0000000 --- a/src/gmdb2/pixmaps/module_big.xpm +++ /dev/null @@ -1,25 +0,0 @@ -/* XPM */ -static char * module_big_xpm[] = { -"24 20 2 1", -" c None", -". c #000000", -" ", -" ", -" ", -" . .. . . ", -" . .. . . ", -" . . . ", -" . . . ", -" .... .. ... .. ..", -" . .. .. . ..", -" . .. .. . ..", -" . .. .. ..", -" . .. .. ..", -" . .. . .. ..", -" . . . .. . ", -" ... .. ... .... .. ", -" . . ", -" ", -" ", -" ", -" "}; diff --git a/src/gmdb2/pixmaps/pk.xpm b/src/gmdb2/pixmaps/pk.xpm deleted file mode 100644 index a8f9b44..0000000 --- a/src/gmdb2/pixmaps/pk.xpm +++ /dev/null @@ -1,24 +0,0 @@ -/* XPM */ -static char * pk_xpm[] = { -"16 16 5 1", -" c None", -". c #FFBF00", -"+ c #1C59DD", -"@ c #000000", -"# c #E8AC17", -" ", -" .... +++ ", -" ..@@.. + + ", -" ...... + + ", -" ...... +++ ", -" .... + ", -" .# + ", -" .# ", -" .# + + ", -" .#. + + ", -" .#.. ++ ", -" .# + + ", -" .#. + + ", -" .#.. + + ", -" ", -" "}; diff --git a/src/gmdb2/pixmaps/query.xpm b/src/gmdb2/pixmaps/query.xpm deleted file mode 100644 index dd3a654..0000000 --- a/src/gmdb2/pixmaps/query.xpm +++ /dev/null @@ -1,46 +0,0 @@ -/* XPM */ -static char * query_xpm[] = { -"10 12 31 1", -" c None", -". c #C9C5C5", -"+ c #C2BEBE", -"@ c #D0CCCC", -"# c #DAD5D5", -"$ c #C1BDBD", -"% c #9B9B9B", -"& c #B6B5B5", -"* c #C0BCBC", -"= c #9D9C9C", -"- c #D4D1D1", -"; c #CCC8C8", -"> c #8C8C8C", -", c #A09F9F", -"' c #959696", -") c #A7A6A6", -"! c #C6C1C1", -"~ c #8D8E8E", -"{ c #A4A5A5", -"] c #BEBBBB", -"^ c #C3C0C0", -"/ c #9D9E9E", -"( c #AFACAC", -"_ c #949595", -": c #B9B7B7", -"< c #AEABAB", -"[ c #B0AEAE", -"} c #A2A2A2", -"| c #A5A5A5", -"1 c #979797", -"2 c #ACABAB", -" .+@ ", -" #$%&*%=- ", -" ;> ,' ", -" )> !~+", -" +{ ]~+", -" ^~/ ", -" (_: ", -" <[ ", -" } ", -" ", -" |+ ", -" +12 "}; diff --git a/src/gmdb2/pixmaps/query_big.xpm b/src/gmdb2/pixmaps/query_big.xpm deleted file mode 100644 index baaa3b2..0000000 --- a/src/gmdb2/pixmaps/query_big.xpm +++ /dev/null @@ -1,29 +0,0 @@ -/* XPM */ -static char * query_big_xpm[] = { -"20 24 2 1", -" c None", -". c #000000", -" ", -" ", -" ........ ", -" .. ..... ", -" .... ..... ", -" ..... ..... ", -" ..... ..... ", -" .... ..... ", -" ..... ", -" ..... ", -" .... ", -" .... ", -" .. ", -" .. ", -" . ", -" . ", -" ", -" ... ", -" ..... ", -" ..... ", -" ..... ", -" .... ", -" ", -" "}; diff --git a/src/gmdb2/pixmaps/report_big.xpm b/src/gmdb2/pixmaps/report_big.xpm deleted file mode 100644 index d273df1..0000000 --- a/src/gmdb2/pixmaps/report_big.xpm +++ /dev/null @@ -1,217 +0,0 @@ -/* XPM */ -static char * report_big_xpm[] = { -"20 20 194 2", -" c None", -". c #45372B", -"+ c #746450", -"@ c #766654", -"# c #736250", -"$ c #625241", -"% c #5E4844", -"& c #D9C3A0", -"* c #EAD7B7", -"= c #E0CAAB", -"- c #9C8A71", -"; c #171512", -"> c #15120E", -", c #5F4946", -"' c #DFCAAB", -") c #EFE2CD", -"! c #F0E6D7", -"~ c #E8DBC9", -"{ c #D1BEA2", -"] c #BBA382", -"^ c #3F362B", -"/ c #020201", -"( c #000000", -"_ c #5D4D43", -": c #DFD1BF", -"< c #F5EDE2", -"[ c #FAF5EE", -"} c #FBF5EE", -"| c #F8EFE4", -"1 c #F0E3D3", -"2 c #BCAE9A", -"3 c #9B8A72", -"4 c #826F5B", -"5 c #564642", -"6 c #594A46", -"7 c #605346", -"8 c #E0D6C9", -"9 c #F8F2EA", -"0 c #FDF9F5", -"a c #FEFBF8", -"b c #FEFAF7", -"c c #FDF6F0", -"d c #F6EADB", -"e c #C3B19E", -"f c #7E6A5B", -"g c #4C3E3C", -"h c #584946", -"i c #2A2221", -"j c #65584A", -"k c #E4DACC", -"l c #F9F3EA", -"m c #FDF8F3", -"n c #FEFAF5", -"o c #FDF8F5", -"p c #FBF4EE", -"q c #FBF3EC", -"r c #AA9E99", -"s c #554643", -"t c #4E413D", -"u c #806F62", -"v c #28231F", -"w c #6E5E4F", -"x c #E8DECF", -"y c #FCF5EA", -"z c #FEF8EF", -"A c #FEF7EF", -"B c #FCF6F0", -"C c #F9F1E7", -"D c #FAF1E6", -"E c #A69A93", -"F c #514240", -"G c #5E4F49", -"H c #CAB695", -"I c #453F33", -"J c #624E3D", -"K c #A88A70", -"L c #F1E6D6", -"M c #FDF4E7", -"N c #FEF5EA", -"O c #FCF4E8", -"P c #F9F0E3", -"Q c #F7EEDE", -"R c #F7EDDD", -"S c #807A72", -"T c #090707", -"U c #0A0908", -"V c #161411", -"W c #4B3B2E", -"X c #766554", -"Y c #DECAB1", -"Z c #F8ECD7", -"` c #FDF2DF", -" . c #FEF3E0", -".. c #FCF1DE", -"+. c #F8EBD7", -"@. c #F5E8D3", -"#. c #F2E2CE", -"$. c #7A7167", -"%. c #030202", -"&. c #493A2E", -"*. c #7C6D5C", -"=. c #F4E4C9", -"-. c #F9EAD0", -";. c #FCEED4", -">. c #F5E5CA", -",. c #EFDFC6", -"'. c #EAD8BE", -"). c #756C5E", -"!. c #5D4D3C", -"~. c #8E7D67", -"{. c #F0DEBE", -"]. c #F1DFBE", -"^. c #F6E5C5", -"/. c #F5E4C5", -"(. c #F2E0C2", -"_. c #F0DDBF", -":. c #E9D7BA", -"<. c #E2CDAF", -"[. c #6F6555", -"}. c #584B40", -"|. c #584A3E", -"1. c #564739", -"2. c #7F6B55", -"3. c #B8A080", -"4. c #DBC5A0", -"5. c #E0C8A1", -"6. c #E9D1AE", -"7. c #EBD5B3", -"8. c #EAD5B4", -"9. c #EAD5B6", -"0. c #E6D1B2", -"a. c #CCB696", -"b. c #665A48", -"c. c #7B7067", -"d. c #ECE8E5", -"e. c #ECE5D8", -"f. c #DAC6AA", -"g. c #AB9177", -"h. c #866C58", -"i. c #907560", -"j. c #BDA381", -"k. c #D3B995", -"l. c #DBC19E", -"m. c #DEC5A1", -"n. c #E2C8A4", -"o. c #DAC09D", -"p. c #514839", -"q. c #15130E", -"r. c #726252", -"s. c #DECAB0", -"t. c #EFDEC5", -"u. c #F5E9D9", -"v. c #E8DCCE", -"w. c #D3C1AD", -"x. c #BFA486", -"y. c #9A7F66", -"z. c #997E66", -"A. c #AE9477", -"B. c #C5AB88", -"C. c #C9AF8C", -"D. c #C7AC89", -"E. c #3C3429", -"F. c #010100", -"G. c #544637", -"H. c #685A48", -"I. c #746A5A", -"J. c #C4B6A5", -"K. c #EDDFCA", -"L. c #F4E6D0", -"M. c #EBDCCA", -"N. c #C5B4A3", -"O. c #B69E86", -"P. c #9D856F", -"Q. c #8A7663", -"R. c #927C67", -"S. c #B29A7A", -"T. c #372F25", -"U. c #6E5F4B", -"V. c #9A8972", -"W. c #BBAE9C", -"X. c #F1E6DA", -"Y. c #F7EDDA", -"Z. c #CCB8A0", -"`. c #867364", -" + c #5F4E48", -".+ c #776651", -"++ c #2E281F", -"@+ c #3C3329", -"#+ c #7E6E64", -"$+ c #4F413E", -"%+ c #463A37", -"&+ c #594946", -"*+ c #181413", -"=+ c #1B1615", -" . . . . ", -" + @ # $ ", -" % & * = - ; > ", -" , ' ) ! ~ { ] ^ / ( ", -" _ : < [ } | 1 2 3 4 5 6 ", -" 7 8 9 0 a b c d e f g h i ", -" j k l m n o p q r s t u v ", -" w x y z A B C D E F G H I ", -" J K L M N O P Q R S T U V ", -" W X Y Z ` ...+.@.#.$.%. ", -" &.*.=.-.;.;.-.>.,.'.)./ ", -" !.~.{.].^./.(._.:.<.[.( ", -" }.|.1.2.3.4.5.6.7.8.9.0.a.b.( ", -". c.d.e.f.g.h.i.j.k.l.m.n.o.p.q. ", -". r.s.t.u.v.w.x.y.z.A.B.C.D.E.F. ", -". G.H.I.J.K.L.M.N.O.P.Q.R.S.T.( ", -" ( ( U.V.W.X.Y.Z.`.s +.+++ ", -" ( ( @+] { #+$+$+G U ", -" > ; %+&+u H V ", -" *+=+v I "}; diff --git a/src/gmdb2/pixmaps/reports.xpm b/src/gmdb2/pixmaps/reports.xpm deleted file mode 100644 index 66b4e11..0000000 --- a/src/gmdb2/pixmaps/reports.xpm +++ /dev/null @@ -1,95 +0,0 @@ -/* XPM */ -static char * reports_xpm[] = { -"16 16 76 1", -" c None", -". c #45372B", -"+ c #4F3939", -"@ c #E7D1AA", -"# c #EBD7B9", -"$ c #D1B692", -"% c #000000", -"& c #F0DBB9", -"* c #F0E7D9", -"= c #F5EBDF", -"- c #CDB18C", -"; c #050403", -"> c #4C3E31", -", c #EFE4D7", -"' c #FBF7F3", -") c #FFFCF9", -"! c #FDF6EF", -"~ c #554542", -"{ c #5A4A47", -"] c #55473A", -"^ c #F2E9DB", -"/ c #FBF6F0", -"( c #FEFBF8", -"_ c #FEFAF7", -": c #FCF4EF", -"< c #FAF3ED", -"[ c #413533", -"} c #57483A", -"| c #F7EDDE", -"1 c #FEF8F0", -"2 c #FEF8EF", -"3 c #FDF7F3", -"4 c #F9F1E7", -"5 c #FBF2E7", -"6 c #594946", -"7 c #EFD8B0", -"8 c #A78568", -"9 c #FBF2E3", -"0 c #FEF5E8", -"a c #FDF5EA", -"b c #F9EFE2", -"c c #F7EDDC", -"d c #F7ECDC", -"e c #4D3D30", -"f c #F1E2CA", -"g c #FCEFD9", -"h c #FEF2DC", -"i c #F8EAD3", -"j c #F4E5CE", -"k c #EEDBC5", -"l c #F5E5C7", -"m c #F7E7C9", -"n c #FCEED0", -"o c #F6E6C8", -"p c #F4E1C3", -"q c #E9D8BC", -"r c #E2CFB1", -"s c #AE9676", -"t c #E5CFA8", -"u c #E4CCA5", -"v c #EFD8B6", -"w c #EBD7B5", -"x c #E7D3B4", -"y c #D7BD99", -"z c #FFFCFB", -"A c #FFF8E9", -"B c #E2C7A3", -"C c #806553", -"D c #BFA582", -"E c #DBC19D", -"F c #020200", -"G c #E1C6A2", -"H c #836854", -"I c #B89F7D", -"J c #FEF7E8", -"K c #5D4B47", -" ... ", -" +@#$%% ", -" +&*=#-;% ", -" >,'))!#-~{ ", -" ]^/(_:<{[{%", -" }|12345{67%", -" .890abcd%%% ", -" efghhijk; ", -" .lmnopqr% ", -" ...stuvw#xy% ", -".zABCCDyEByF ", -".-#zAGHCIDD% ", -" %%-#zJB{Ks% ", -" %%-#{[{% ", -" %%{{7% ", -" %%% "}; diff --git a/src/gmdb2/pixmaps/stock_export-16.png b/src/gmdb2/pixmaps/stock_export-16.png deleted file mode 100644 index 9d36c390207cdb07d8dd61dda4bca65e53bed33a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 zcmV;10(t$3P)Nc`5m8)CPQvws1tGR<*655NeZ!P=7$H zqG;11wUjV|%uNU-LD9~IEsHiLqC;6A;gCHWm?=zU-g6$lH{;AWzIR(xqtB5R9XN0< z_k7R&e((2QfG$A%XI}CEBAeSH`f~$&VidXD%kDUOv#(eW+`Y}f;CE-h=GMgDp(`00Lh)mj|f8fE+fOLKvfR^)@35UZ)pd?8Es7orkuA?r+ zXb-m$2-NQMuqRYiEhfN?>(>aigwWRw78g|xR@V^3wv$K=hni}HqIOc}I?93FI&8!O}<`e7U z(fFiDrBcFi9N{>QFilfvn&z_Y%;^&)R=Om#HdfQzREM1}klWsNopS0}N3k9pd&T?6 z3~yeHxFy7s8+=p-K-*s0jdBmQfT1UDuh7M0h;@ zmhO|s@dOULTPShd3A-at7#f5rP2ZULIHa#4}jnA zr?I}4aJU`AFaYrRd^m+XQkjHr7jFsR*^^NhI2a6KSsBXZ3IJ@|#6{7w5bbE6{jclmGw#07*qoM6N<$g5+#0djJ3c diff --git a/src/gmdb2/pixmaps/stock_export.png b/src/gmdb2/pixmaps/stock_export.png deleted file mode 100644 index 257f8e8daa672cdc5062159cbcaf71b1df748e61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1278 zcmV)m0e4fA@dy<=zWiLw`F7noi5Prkk5{tTF8aesWne!X=TbsUR?H5@rN5;9iI~z4w3rZ|9so zc<%)bGV9r%?L7bU@;lFSo^zhRi~lcTTHF0#r}iHfTnyZa>k7bb`u4mA*l|12w|F{W zGob#Z-rBx>d$6YF{UFd*URLTG_@j^VvQi(=cIe=~ATR`U04`S?pe}Vs7}O_eYdFr% zO{HjVH%dyRu7l==xLvT}b-ugU#Msy<;m}aht;xv=d_F(n&>)wuT%)n6IReb}BnB8N zLjP}lj0}%4dHE7VCqRN@S>OvGV==5i8lP|7#F~<|96xasfTjx<@uj$Vy6_n$#s|@3 zF&dki0p0+-Nq|x=q>%W1enJs}+fD(gz~#kdE0i~lm3xi=u&%5WfR>gPhKENO7#QHj zjUKA2D`{`PMtNB&jZMwVQ?cP7*>ADVl#;2bgq_A)a;m{DKCFt$_ zop5-Vj5!&sTfdS1zFv$)kMZt1Z{^jWIy0(G&o61pho(^NuH76vdJKT&%a@Upoke;u zoey{Hz%&d721DGwJwW}bGoyg?OifiNb+6UY(Sb@B)1+b_-UPX!v^iYVRqM})MUtC;FG#X9XH8nMKUH=6k1i1xI^6J~$IQvB%K>vLJODGJ> z!M9>HwY9aFrunzU4M*WY;PFi5Mny#hx~`Lwk%L=v5suzJZ|b7i3eyw>GxO213P{&n zI6@+%LMesEt&w8d1XF#<@M)Tc?FjPxDa1@0k6XhrotXie4HC)N9UV>6=xnUVg`3Q| zS!8CY;d9AyV2i13=*j2c$%gL|FUEI{X1Y zd-v>OWH=1K!9zzF8ymrl=@>DcXPx+oXhF$j1R!mwv9I8uR9kP@#+{y-{$ z_|6j&xqAoOx)*}1c{v2rGw=rjByOv3hVnJ_*f|0z1yV?in2rua@lk%g*@I~qq~k_d29_pK$$+6A1ikPGb$Ld8s< -#include -#include "gmdb.h" - -extern GtkWidget *app; -extern MdbHandle *mdb; - -GladeXML *prefswin_xml; - -unsigned long -gmdb_prefs_get_maxrows() -{ - gchar *str; - - str = gnome_config_get_string("/gmdb/prefs/maxrows"); - if (!str || !strlen(str)) - return 1000; - else - return atol(str); -} - -/* callbacks */ -static void -gmdb_prefs_help_cb(GtkWidget *w, gpointer data) -{ - GError *error = NULL; - - gnome_help_display("gmdb.xml", "gmdb-prefs", &error); - if (error != NULL) { - g_warning ("%s", error->message); - g_error_free (error); - } -} - -static void -gmdb_prefs_save_cb(GtkWidget *w, GladeXML *xml) -{ - GtkWidget *entry; - GtkWidget *win; - gchar *str; - - entry = glade_xml_get_widget (xml, "maxrows_entry"); - str = (gchar *) gtk_entry_get_text(GTK_ENTRY(entry)); - printf("str = %s\n",str); - gnome_config_set_string("/gmdb/prefs/maxrows", str); - gnome_config_sync(); - win = glade_xml_get_widget (xml, "prefs_dialog"); - if (win) gtk_widget_destroy(win); -} - -static void -gmdb_prefs_cancel_cb(GtkWidget *w, GladeXML *xml) -{ - GtkWidget *win; - - win = glade_xml_get_widget (xml, "prefs_dialog"); - if (win) gtk_widget_destroy(win); -} - -GtkWidget * -gmdb_prefs_new() -{ - GtkWidget *prefswin, *button; - GtkWidget *entry; - gchar *str; - - /* load the interface */ - prefswin_xml = glade_xml_new(GMDB_GLADEDIR "gmdb-prefs.glade", NULL, NULL); - /* connect the signals in the interface */ - glade_xml_signal_autoconnect(prefswin_xml); - - entry = glade_xml_get_widget (prefswin_xml, "maxrows_entry"); - - button = glade_xml_get_widget (prefswin_xml, "cancel_button"); - g_signal_connect (G_OBJECT (button), "clicked", - G_CALLBACK (gmdb_prefs_cancel_cb), prefswin_xml); - - button = glade_xml_get_widget (prefswin_xml, "ok_button"); - g_signal_connect (G_OBJECT (button), "clicked", - G_CALLBACK (gmdb_prefs_save_cb), prefswin_xml); - - button = glade_xml_get_widget (prefswin_xml, "help_button"); - g_signal_connect (G_OBJECT (button), "clicked", - G_CALLBACK (gmdb_prefs_help_cb), prefswin_xml); - - str = gnome_config_get_string("/gmdb/prefs/maxrows"); - if (!str || !strlen(str)) { - str = "1000"; - gnome_config_set_string("/gmdb/prefs/maxrows", str); - gnome_config_sync(); - } - gtk_entry_set_text(GTK_ENTRY(entry), str); - - prefswin = glade_xml_get_widget (prefswin_xml, "prefs_dialog"); - return prefswin; -} diff --git a/src/gmdb2/schema.c b/src/gmdb2/schema.c deleted file mode 100644 index 3a8c735..0000000 --- a/src/gmdb2/schema.c +++ /dev/null @@ -1,219 +0,0 @@ -/* MDB Tools - A library for reading MS Access database file - * Copyright (C) 2000 Brian Bruns - * - * 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 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include -#include -#include -#include "gmdb.h" - -extern GtkWidget *app; -extern MdbHandle *mdb; - -GladeXML *schemawin_xml; -static gchar backend[100]; -static gchar tabname[MDB_MAX_OBJ_NAME+1]; -static guint32 export_options; - -#define ALL_TABLES "(All Tables)" - -static struct { - const char *option_name; - guint32 option_value; -} capabilities_xlt[] = { - { "drop_checkbox", MDB_SHEXP_DROPTABLE }, - { "cstnotnull_checkbox", MDB_SHEXP_CST_NOTNULL }, - { "cstnotempty_checkbox", MDB_SHEXP_CST_NOTEMPTY}, - { "comments_checkbox", MDB_SHEXP_COMMENTS}, - { "defaults_checkbox", MDB_SHEXP_DEFVALUES }, - { "index_checkbox", MDB_SHEXP_INDEXES}, - { "rel_checkbox", MDB_SHEXP_RELATIONS} -}; -#define n_capabilities (sizeof(capabilities_xlt)/sizeof(capabilities_xlt[0])) - -static void -gmdb_schema_export(const gchar *file_path) -{ -FILE *outfile; - - GtkWidget *dlg; - - //printf("file path %s\n",file_path); - if ((outfile=fopen(file_path, "w"))==NULL) { - GtkWidget* dlg = gtk_message_dialog_new (NULL, - GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE, - _("Unable to open file.")); - gtk_dialog_run (GTK_DIALOG (dlg)); - gtk_widget_destroy (dlg); - return; - } - mdb_set_default_backend(mdb,backend); - - mdb_print_schema(mdb, outfile, *tabname?tabname:NULL, NULL, export_options); - - fclose(outfile); - dlg = gtk_message_dialog_new (NULL, - GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE, - _("Schema exported successfully.")); - gtk_dialog_run (GTK_DIALOG (dlg)); - gtk_widget_destroy (dlg); -} -void -gmdb_schema_export_cb(GtkWidget *w, gpointer data) -{ -GtkWidget *schemawin, *checkbox, *chooser; -GtkComboBox *combobox; -const gchar *file_path; -gchar *tmp; -int i; - - schemawin = glade_xml_get_widget (schemawin_xml, "schema_dialog"); - - chooser = glade_xml_get_widget (schemawin_xml, "filename_entry"); - file_path = gtk_entry_get_text(GTK_ENTRY(chooser)); - - combobox = GTK_COMBO_BOX(glade_xml_get_widget(schemawin_xml, "table_combo")); - tmp = gtk_combo_box_get_active_text(combobox); - strncpy(tabname,tmp,MDB_MAX_OBJ_NAME); - tabname[MDB_MAX_OBJ_NAME]=0; - if (!strcmp(tabname,ALL_TABLES)) - tabname[0]='\0'; - - combobox = GTK_COMBO_BOX(glade_xml_get_widget (schemawin_xml, "backend_combo")); - tmp = gtk_combo_box_get_active_text(combobox); - if (!strcmp(tmp, "Oracle")) - strcpy(backend, "oracle"); - else if (!strcmp(tmp, "Sybase")) - strcpy(backend,"sybase"); - else if (!strcmp(tmp,"MS SQL Server")) - strcpy(backend,"sybase"); - else if (!strcmp(tmp, "PostgreSQL")) - strcpy(backend,"postgres"); - else if (!strcmp(tmp,"MySQL")) - strcpy(backend,"mysql"); - else if (!strcmp(tmp,"SQLite")) - strcpy(backend,"sqlite"); - else - strcpy(backend,"access"); - - /* make sure unknown default options are enabled */ - export_options = MDB_SHEXP_DEFAULT; - for (i=0; icapabilities; - //printf("backend capabilities: 0x%04x\n", capabilities); - for (i=0; imessage); - g_error_free (error); - } -} - -void -gmdb_schema_new_cb(GtkWidget *w, gpointer data) -{ - GtkComboBox *combobox; - MdbCatalogEntry *entry; - int i; - - /* load the interface */ - schemawin_xml = glade_xml_new(GMDB_GLADEDIR "gmdb-schema.glade", NULL, NULL); - /* connect the signals in the interface */ - glade_xml_signal_autoconnect(schemawin_xml); - /* set up capabilities call back. TODO: autoconnect should do that */ - combobox = GTK_COMBO_BOX(glade_xml_get_widget(schemawin_xml, "backend_combo")); - gtk_combo_box_set_active(combobox, 0); - g_signal_connect( G_OBJECT (combobox), "changed", - G_CALLBACK(gmdb_schema_backend_cb), NULL); - - /* set signals with user data, anyone know how to do this in glade? */ - combobox = GTK_COMBO_BOX(glade_xml_get_widget(schemawin_xml, "table_combo")); - gtk_combo_box_append_text(combobox, ALL_TABLES); - /* add all user tables in catalog to list */ - for (i=0; i < mdb->num_catalog; i++) { - entry = g_ptr_array_index (mdb->catalog, i); - if (mdb_is_user_table(entry)) { - gtk_combo_box_append_text(combobox, entry->object_name); - } - } /* for */ - gtk_combo_box_set_active(combobox, 0); - - check_default_options(); - refresh_available_options(); -} diff --git a/src/gmdb2/sql.c b/src/gmdb2/sql.c deleted file mode 100644 index e41f107..0000000 --- a/src/gmdb2/sql.c +++ /dev/null @@ -1,751 +0,0 @@ -/* MDB Tools - A library for reading MS Access database file - * Copyright (C) 2000 Brian Bruns - * - * 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 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include -#include -#include "gmdb.h" - -#if SQL - -GList *sql_list; - -extern MdbHandle *mdb; -extern MdbSQL *sql; - -static void gmdb_sql_tree_populate (MdbHandle*, GladeXML*); -static void gmdb_sql_load_query (GladeXML*, gchar*); -static void gmdb_sql_save_query (GladeXML*, gchar*); -static void gmdb_sql_save_as_cb (GtkWidget*, GladeXML*); - -void -gmdb_sql_close_all() -{ - GladeXML *xml; - GtkWidget *win; - - while ((xml = g_list_nth_data(sql_list, 0))) { - win = glade_xml_get_widget (xml, "sql_window"); - sql_list = g_list_remove(sql_list, xml); - if (win) gtk_widget_destroy(win); - } -} - -gchar* gmdb_export_get_filepath (GladeXML*); /* from table_export.c */ - -/* callbacks */ -static void -gmdb_sql_write_rslt_cb(GtkWidget *w, GladeXML *xml) -{ - /* We need to re-run the whole query because some information is not stored - * in the TreeStore, such as column types. - */ - gchar *file_path; - GladeXML *sql_xml; - GtkWidget *filesel, *dlg; - FILE *outfile; - int i; - int need_headers = 0; - gchar delimiter[11]; - gchar quotechar[5]; - gchar escape_char[5]; - int bin_mode; - gchar lineterm[5]; - - guint len; - gchar *buf; - GtkTextIter start, end; - GtkTextBuffer *txtbuffer; - GtkWidget *textview; - char **bound_values; - int *bound_lens; - MdbSQLColumn *sqlcol; - long row; - char *value; - size_t length; - MdbTableDef *table; - MdbColumn *col = NULL; - - gmdb_export_get_delimiter(xml, delimiter, sizeof(delimiter)); - gmdb_export_get_lineterm(xml, lineterm, sizeof(lineterm)); - gmdb_export_get_quotechar(xml, quotechar, sizeof(quotechar)); - gmdb_export_get_escapechar(xml, escape_char, sizeof(escape_char)); - bin_mode = gmdb_export_get_binmode(xml); - need_headers = gmdb_export_get_headers(xml); - file_path = gmdb_export_get_filepath(xml); - - if ((outfile=fopen(file_path, "w"))==NULL) { - dlg = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (w)), - GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE, - _("Unable to open file.")); - gtk_dialog_run (GTK_DIALOG (dlg)); - gtk_widget_destroy (dlg); - return; - } - - /* Get SQL */ - filesel = glade_xml_get_widget (xml, "export_dialog"); - sql_xml = g_object_get_data(G_OBJECT(filesel), "sql_xml"); - //printf("sql_xml %p\n",sql_xml); - textview = glade_xml_get_widget(sql_xml, "sql_textview"); - txtbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview)); - len = gtk_text_buffer_get_char_count(txtbuffer); - gtk_text_buffer_get_iter_at_offset (txtbuffer, &start, 0); - gtk_text_buffer_get_iter_at_offset (txtbuffer, &end, len); - buf = gtk_text_buffer_get_text(txtbuffer, &start, &end, FALSE); - - - /* ok now execute it */ - mdb_sql_run_query(sql, buf); - if (mdb_sql_has_error(sql)) { - GtkWidget* dlg = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (w)), - GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE, - "%s", mdb_sql_last_error(sql)); - gtk_dialog_run (GTK_DIALOG (dlg)); - gtk_widget_destroy (dlg); - mdb_sql_reset(sql); - - fclose(outfile); - gtk_widget_destroy(filesel); - return; - } - - bound_values = (char **) g_malloc(sql->num_columns * sizeof(char *)); - bound_lens = (int *) g_malloc(sql->num_columns * sizeof(int)); - - for (i=0; inum_columns; i++) { - /* bind columns */ - bound_values[i] = (char *) g_malloc0(MDB_BIND_SIZE); - mdb_sql_bind_column(sql, i+1, bound_values[i], &bound_lens[i]); - - /* display column titles */ - if (need_headers) { - if (i>0) - fputs(delimiter, outfile); - sqlcol = g_ptr_array_index(sql->columns,i); - gmdb_print_col(outfile, sqlcol->name, quotechar[0]!='\0', MDB_TEXT, 0, quotechar, escape_char, bin_mode); - } - } - - row = 0; - while (mdb_fetch_row(sql->cur_table)) { - row++; - for (i=0; inum_columns; i++) { - if (i>0) - fputs(delimiter, outfile); - - sqlcol = g_ptr_array_index(sql->columns, i); - - /* Find col matching sqlcol */ - table = sql->cur_table; - for (i=0; inum_cols; i++) { - col = g_ptr_array_index(table->columns, i); - if (!g_ascii_strcasecmp(sqlcol->name, col->name)) - break; - } - /* assert(i!=table->num_cols). Can't happen, already checked. */ - - /* Don't quote NULLs */ - if (bound_lens[i] && sqlcol->bind_type != MDB_OLE) { - if (col->col_type == MDB_OLE) { - value = mdb_ole_read_full(mdb, col, &length); - } else { - value = bound_values[i]; - length = bound_lens[i]; - } - gmdb_print_col(outfile, value, quotechar[0]!='\0', col->col_type, length, quotechar, escape_char, bin_mode); - if (col->col_type == MDB_OLE) - free(value); - } - } - fputs(lineterm, outfile); - } - - /* free the memory used to bind */ - for (i=0; inum_columns; i++) { - g_free(bound_values[i]); - } - - mdb_sql_reset(sql); - g_free(buf); - - fclose(outfile); - - dlg = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (w)), - GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE, - _("%ld rows successfully exported."), row); - gtk_dialog_run (GTK_DIALOG (dlg)); - gtk_widget_destroy (dlg); - - gtk_widget_destroy(filesel); -} - - -static void -gmdb_sql_results_cb(GtkWidget *w, GladeXML *xml) -{ - GladeXML *dialog_xml; - GtkWidget *but; - GtkWidget *filesel; - - /* load the interface */ - dialog_xml = glade_xml_new(GMDB_GLADEDIR "gmdb-export.glade", NULL, NULL); - /* connect the signals in the interface */ - glade_xml_signal_autoconnect(dialog_xml); - - filesel = glade_xml_get_widget (dialog_xml, "export_dialog"); - gtk_window_set_title(GTK_WINDOW(filesel), "Save Results As"); - - but = glade_xml_get_widget (dialog_xml, "export_button"); - gtk_widget_hide(but); - - but = glade_xml_get_widget (dialog_xml, "save_button"); - gtk_widget_show(but); - - gmdb_table_export_populate_dialog(dialog_xml); - - but = glade_xml_get_widget (dialog_xml, "save_button"); - g_signal_connect (G_OBJECT (but), "clicked", - G_CALLBACK (gmdb_sql_write_rslt_cb), dialog_xml); - - g_object_set_data(G_OBJECT(filesel), "sql_xml", xml); -} -static void -gmdb_sql_save_cb(GtkWidget *w, GladeXML *xml) -{ - GtkWidget *textview; - gchar *str; - - textview = glade_xml_get_widget (xml, "sql_textview"); - str = g_object_get_data(G_OBJECT(textview), "file_name"); - if (!str) { - gmdb_sql_save_as_cb(w, xml); - return; - } - gmdb_sql_save_query(xml, str); -} -static void -gmdb_sql_save_as_cb(GtkWidget *w, GladeXML *xml) -{ - GtkWindow *parent_window = (GtkWindow *) glade_xml_get_widget (xml, "gmdb"); - GtkWidget *dialog = gtk_file_chooser_dialog_new ("Save Query As", - parent_window, - GTK_FILE_CHOOSER_ACTION_SAVE, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, - NULL); - - if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) - { - char *filename; - - filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); - gmdb_sql_save_query(xml, filename); - } - - gtk_widget_destroy (dialog); -} -static void -gmdb_sql_open_cb(GtkWidget *w, GladeXML *xml) -{ - GtkWindow *parent_window = (GtkWindow *) glade_xml_get_widget (xml, "gmdb"); - GtkWidget *dialog = gtk_file_chooser_dialog_new ("Open SQL Query", - parent_window, - GTK_FILE_CHOOSER_ACTION_OPEN, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, - NULL); - - if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) - { - char *filename; - - filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); - gmdb_sql_load_query(xml, filename); - } - - gtk_widget_destroy (dialog); - -} -static void -gmdb_sql_copy_cb(GtkWidget *w, GladeXML *xml) -{ - GtkTextBuffer *txtbuffer; - GtkClipboard *clipboard; - GtkWidget *textview; - - textview = glade_xml_get_widget(xml, "sql_textview"); - clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); - txtbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview)); - gtk_text_buffer_copy_clipboard(txtbuffer, clipboard); -} -static void -gmdb_sql_cut_cb(GtkWidget *w, GladeXML *xml) -{ - GtkTextBuffer *txtbuffer; - GtkClipboard *clipboard; - GtkWidget *textview; - - textview = glade_xml_get_widget(xml, "sql_textview"); - clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); - txtbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview)); - gtk_text_buffer_cut_clipboard(txtbuffer, clipboard, TRUE); -} -static void -gmdb_sql_paste_cb(GtkWidget *w, GladeXML *xml) -{ - GtkTextBuffer *txtbuffer; - GtkClipboard *clipboard; - GtkWidget *textview; - - textview = glade_xml_get_widget(xml, "sql_textview"); - clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); - txtbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview)); - gtk_text_buffer_paste_clipboard(txtbuffer, clipboard, NULL, TRUE); -} -static void -gmdb_sql_close_cb(GtkWidget *w, GladeXML *xml) -{ - GtkWidget *win; - sql_list = g_list_remove(sql_list, xml); - win = glade_xml_get_widget (xml, "sql_window"); - if (win) gtk_widget_destroy(win); -} - -static void -gmdb_sql_dnd_dataget_cb( - GtkWidget *w, GdkDragContext *dc, - GtkSelectionData *selection_data, guint info, guint t, - GladeXML *xml) -{ -gchar tablename[256]; -//gchar *tablename = "Orders"; -gchar *name; -GtkTreeSelection *select; -GtkTreeStore *store; -GtkTreeView *tree; -GtkTreeIter iter2; - - tree = (GtkTreeView *) glade_xml_get_widget(xml, "sql_treeview"); - select = gtk_tree_view_get_selection(GTK_TREE_VIEW (tree)); - store = (GtkTreeStore *) gtk_tree_view_get_model(tree); - gtk_tree_selection_get_selected (select, NULL, &iter2); - gtk_tree_model_get (GTK_TREE_MODEL(store), &iter2, 0, &name, -1); - - strcpy(tablename,name); - g_free(name); - //strcpy(tablename, "Shippers"); - gtk_selection_data_set( - selection_data, - GDK_SELECTION_TYPE_STRING, - 8, /* 8 bits per character. */ - (guchar*)tablename, strlen(tablename)); -} -static void gmdb_sql_dnd_datareceived_cb( - GtkWidget *w, - GdkDragContext *dc, - gint x, gint y, - GtkSelectionData *selection_data, - guint info, guint t, - GladeXML *xml) -{ -GtkTextIter iter; -GtkTextBuffer *txtbuffer; -GtkWidget *textview; - - textview = glade_xml_get_widget(xml, "sql_textview"); - txtbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview)); - if (gtk_text_buffer_get_char_count(txtbuffer)==0) { - gtk_text_buffer_get_iter_at_offset (txtbuffer, &iter, 0); - gtk_text_buffer_insert(txtbuffer, &iter, "select * from ", 14); - } - gtk_widget_grab_focus(GTK_WIDGET(textview)); -} - -static void -gmdb_sql_select_hist_cb(GtkComboBox *combobox, GladeXML *xml) -{ - gchar *buf; - GtkTextBuffer *txtbuffer; - GtkWidget *textview; - - buf = gtk_combo_box_get_active_text(combobox); - if (!buf) return; - textview = glade_xml_get_widget(xml, "sql_textview"); - txtbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview)); - gtk_text_buffer_set_text(txtbuffer, buf, strlen(buf)); -} - -static void -gmdb_sql_execute_cb(GtkWidget *w, GladeXML *xml) -{ - - guint len; - gchar *buf; - gchar *bound_data[256]; - int i; - MdbSQLColumn *sqlcol; - GtkTextBuffer *txtbuffer; - GtkTextIter start, end; - GtkWidget *textview, *combobox, *treeview; - GtkTreeModel *store; - /*GtkWidget *window;*/ - GType *gtypes; - GtkTreeIter iter; - GtkTreeViewColumn *column; - long row, maxrow; - /* GdkCursor *watch, *pointer; */ - - /* need to figure out how to clock during the treeview recalc/redraw - window = glade_xml_get_widget(xml, "sql_window"); - watch = gdk_cursor_new(GDK_WATCH); - gdk_window_set_cursor(GTK_WIDGET(window)->window, watch); - gdk_cursor_unref(watch); - */ - - /* stuff this query on the history */ - textview = glade_xml_get_widget(xml, "sql_textview"); - combobox = glade_xml_get_widget(xml, "sql_combo"); - txtbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview)); - len = gtk_text_buffer_get_char_count(txtbuffer); - gtk_text_buffer_get_iter_at_offset (txtbuffer, &start, 0); - gtk_text_buffer_get_iter_at_offset (txtbuffer, &end, len); - buf = gtk_text_buffer_get_text(txtbuffer, &start, &end, FALSE); - - /* add to the history */ - gtk_combo_box_prepend_text(GTK_COMBO_BOX(combobox), buf); - gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), 0); - - /* ok now execute it */ - mdb_sql_run_query(sql, buf); - if (mdb_sql_has_error(sql)) { - GtkWidget* dlg = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (w)), - GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE, - "%s", mdb_sql_last_error(sql)); - gtk_dialog_run (GTK_DIALOG (dlg)); - gtk_widget_destroy (dlg); - mdb_sql_reset(sql); - return; - } - - treeview = glade_xml_get_widget(xml, "sql_results"); - - gtypes = g_malloc(sizeof(GType) * sql->num_columns); - for (i=0;inum_columns;i++) - gtypes[i]=G_TYPE_STRING; - - store = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview)); - if (store) { - while ((column = gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), 0))) { - gtk_tree_view_remove_column(GTK_TREE_VIEW(treeview), column); - } - g_object_unref(store); - } - store = (GtkTreeModel*)gtk_list_store_newv(sql->num_columns, gtypes); - g_free(gtypes); - - gtk_tree_view_set_model(GTK_TREE_VIEW(treeview), store); - - GtkCellRenderer *renderer; - renderer = gtk_cell_renderer_text_new(); - - for (i=0;inum_columns;i++) { - bound_data[i] = (char *) g_malloc0(MDB_BIND_SIZE); - mdb_sql_bind_column(sql, i+1, bound_data[i], NULL); - sqlcol = g_ptr_array_index(sql->columns,i); - column = gtk_tree_view_column_new_with_attributes(sqlcol->name, renderer, "text", i, NULL); - gtk_tree_view_append_column(GTK_TREE_VIEW (treeview), column); - } - - maxrow = gmdb_prefs_get_maxrows(); - - row = 0; - while(mdb_fetch_row(sql->cur_table) && - (!maxrow || (row < maxrow))) { - row++; - gtk_list_store_append(GTK_LIST_STORE(store), &iter); - for (i=0;inum_columns;i++) { - gtk_list_store_set(GTK_LIST_STORE(store), - &iter, i, (gchar *) bound_data[i], -1); - } - } - - - /* free the memory used to bind */ - for (i=0;inum_columns;i++) { - g_free(bound_data[i]); - } - - mdb_sql_reset(sql); - g_free(buf); - - /* - pointer = gdk_cursor_new(GDK_LEFT_PTR); - gdk_window_set_cursor(GTK_WIDGET(window)->window, pointer); - gdk_cursor_unref(pointer); - */ - -} - -void -gmdb_sql_new_cb (GtkWidget *w, gpointer data) { - GtkTargetEntry src; - GtkWidget *mi, *but, *combobox; - GladeXML *sqlwin_xml; - - /* load the interface */ - sqlwin_xml = glade_xml_new(GMDB_GLADEDIR "gmdb-sql.glade", NULL, NULL); - /* connect the signals in the interface */ - glade_xml_signal_autoconnect(sqlwin_xml); - - sql_list = g_list_append(sql_list, sqlwin_xml); - - mi = glade_xml_get_widget (sqlwin_xml, "save_menu"); - g_signal_connect (G_OBJECT (mi), "activate", - G_CALLBACK (gmdb_sql_save_cb), sqlwin_xml); - - but = glade_xml_get_widget (sqlwin_xml, "save_button"); - g_signal_connect (G_OBJECT (but), "clicked", - G_CALLBACK (gmdb_sql_save_cb), sqlwin_xml); - - mi = glade_xml_get_widget (sqlwin_xml, "save_as_menu"); - g_signal_connect (G_OBJECT (mi), "activate", - G_CALLBACK (gmdb_sql_save_as_cb), sqlwin_xml); - - //but = glade_xml_get_widget (sqlwin_xml, "save_as_button"); - //g_signal_connect (G_OBJECT (but), "clicked", - // G_CALLBACK (gmdb_sql_save_as_cb), sqlwin_xml); - - mi = glade_xml_get_widget (sqlwin_xml, "results_menu"); - g_signal_connect (G_OBJECT (mi), "activate", - G_CALLBACK (gmdb_sql_results_cb), sqlwin_xml); - - but = glade_xml_get_widget (sqlwin_xml, "results_button"); - g_signal_connect (G_OBJECT (but), "clicked", - G_CALLBACK (gmdb_sql_results_cb), sqlwin_xml); - - mi = glade_xml_get_widget (sqlwin_xml, "open_menu"); - g_signal_connect (G_OBJECT (mi), "activate", - G_CALLBACK (gmdb_sql_open_cb), sqlwin_xml); - - but = glade_xml_get_widget (sqlwin_xml, "open_button"); - g_signal_connect (G_OBJECT (but), "clicked", - G_CALLBACK (gmdb_sql_open_cb), sqlwin_xml); - - mi = glade_xml_get_widget (sqlwin_xml, "paste_menu"); - g_signal_connect (G_OBJECT (mi), "activate", - G_CALLBACK (gmdb_sql_paste_cb), sqlwin_xml); - - mi = glade_xml_get_widget (sqlwin_xml, "cut_menu"); - g_signal_connect (G_OBJECT (mi), "activate", - G_CALLBACK (gmdb_sql_cut_cb), sqlwin_xml); - - mi = glade_xml_get_widget (sqlwin_xml, "copy_menu"); - g_signal_connect (G_OBJECT (mi), "activate", - G_CALLBACK (gmdb_sql_copy_cb), sqlwin_xml); - - mi = glade_xml_get_widget (sqlwin_xml, "close_menu"); - g_signal_connect (G_OBJECT (mi), "activate", - G_CALLBACK (gmdb_sql_close_cb), sqlwin_xml); - - but = glade_xml_get_widget (sqlwin_xml, "close_button"); - g_signal_connect (G_OBJECT (but), "clicked", - G_CALLBACK (gmdb_sql_close_cb), sqlwin_xml); - - mi = glade_xml_get_widget (sqlwin_xml, "execute_menu"); - g_signal_connect (G_OBJECT (mi), "activate", - G_CALLBACK (gmdb_sql_execute_cb), sqlwin_xml); - - combobox = glade_xml_get_widget(sqlwin_xml, "sql_combo"); - g_signal_connect (G_OBJECT(GTK_COMBO_BOX(combobox)), "changed", - G_CALLBACK (gmdb_sql_select_hist_cb), sqlwin_xml); - - but = glade_xml_get_widget (sqlwin_xml, "execute_button"); - g_signal_connect (G_OBJECT (but), "clicked", - G_CALLBACK (gmdb_sql_execute_cb), sqlwin_xml); - - /* set up treeview, libglade only gives us the empty widget */ - GtkWidget *tree = glade_xml_get_widget(sqlwin_xml, "sql_treeview"); - GtkTreeStore *store = gtk_tree_store_new(1, G_TYPE_STRING); - gtk_tree_view_set_model(GTK_TREE_VIEW(tree), GTK_TREE_MODEL(store)); - - GtkCellRenderer *renderer; - GtkTreeViewColumn *column; - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("Name", - renderer, "text", 0, NULL); - gtk_tree_view_append_column(GTK_TREE_VIEW (tree), column); - - GtkTreeSelection *select = - gtk_tree_view_get_selection (GTK_TREE_VIEW (tree)); - gtk_tree_selection_set_mode (select, GTK_SELECTION_SINGLE); - //g_signal_connect (G_OBJECT (select), "changed", - //G_CALLBACK (gmdb_sql_select_cb), sqlwin_xml); - - /* populate first level of tree */ - gmdb_sql_tree_populate(mdb, sqlwin_xml); - - GtkWidget *textview = glade_xml_get_widget(sqlwin_xml, "sql_textview"); - src.target = "table"; - src.flags = 0; - src.info = 1; - gtk_drag_source_set( tree, GDK_BUTTON1_MASK, &src, 1, GDK_ACTION_COPY); - gtk_drag_dest_set( textview, - //GTK_DEST_DEFAULT_MOTION | - GTK_DEST_DEFAULT_HIGHLIGHT , - // GTK_DEST_DEFAULT_DROP, - &src, 1, GDK_ACTION_COPY | GDK_ACTION_MOVE); - gtk_signal_connect( GTK_OBJECT(tree), "drag_data_get", - GTK_SIGNAL_FUNC(gmdb_sql_dnd_dataget_cb), sqlwin_xml); - gtk_signal_connect( GTK_OBJECT(textview), "drag_data_received", - GTK_SIGNAL_FUNC(gmdb_sql_dnd_datareceived_cb), sqlwin_xml); - - //GValue value = {0, }; - //but = glade_xml_get_widget(sqlwin_xml, "results_button"); - //g_value_init(&value, G_TYPE_STRING); - //g_value_set_static_string(&value, GMDB_ICONDIR "stock_export.png"); - //g_object_set_property(G_OBJECT (but), "file" , &value); - //g_value_unset (&value); - - gtk_widget_grab_focus(GTK_WIDGET(textview)); -} - -/* functions */ -static gchar * -gmdb_sql_get_basename(char *file_path) -{ - int i, len; - gchar *basename; - - for (i=strlen(file_path);i>=0 && file_path[i]!='/';i--); - len = strlen(file_path) - i + 2; - basename = g_malloc(len); - if (file_path[i]=='/') { - strncpy(basename,&file_path[i+1],len); - } else { - strncpy(basename,file_path,len); - } - basename[len]='\0'; - - return basename; -} - -static void -gmdb_sql_set_file(GladeXML *xml, gchar *file_name) -{ - GtkWidget *window, *textview; - gchar *title; - gchar *basename; - gchar *suffix = " - MDB Query Tool"; - - basename = gmdb_sql_get_basename(file_name); - title = g_malloc(strlen(basename) + strlen(suffix) + 1); - sprintf(title,"%s%s", basename, suffix); - g_free(basename); - window = glade_xml_get_widget(xml, "sql_window"); - gtk_window_set_title(GTK_WINDOW(window), title); - g_free(title); - textview = glade_xml_get_widget(xml, "sql_textview"); - g_object_set_data(G_OBJECT(textview), "file_name", file_name); -} - -static void -gmdb_sql_save_query (GladeXML *xml, gchar *file_path) { - FILE *out; - GtkWidget *textview; - GtkTextBuffer *txtbuffer; - GtkTextIter start, end; - gchar *buf; - - if (!(out=fopen(file_path, "w"))) { - GtkWidget* dlg = gtk_message_dialog_new (NULL, - GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE, - _("Unable to open file.")); - gtk_dialog_run (GTK_DIALOG (dlg)); - gtk_widget_destroy (dlg); - return; - } - textview = glade_xml_get_widget(xml, "sql_textview"); - txtbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview)); - gtk_text_buffer_get_start_iter(txtbuffer, &start); - gtk_text_buffer_get_end_iter(txtbuffer, &end); - buf = gtk_text_buffer_get_text(txtbuffer, &start, &end, FALSE); - fprintf(out,"%s\n",buf); - fclose(out); - gmdb_sql_set_file(xml, file_path); -} -static void -gmdb_sql_load_query(GladeXML *xml, gchar *file_path) -{ - FILE *in; - char buf[256]; - GtkWidget *textview; - GtkTextBuffer *txtbuffer; - GtkTextIter start, end; - - if (!(in=fopen(file_path, "r"))) { - GtkWidget* dlg = gtk_message_dialog_new (NULL, - GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE, - _("Unable to open file.")); - gtk_dialog_run (GTK_DIALOG (dlg)); - gtk_widget_destroy (dlg); - return; - } - textview = glade_xml_get_widget(xml, "sql_textview"); - txtbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview)); - gtk_text_buffer_get_start_iter(txtbuffer, &start); - gtk_text_buffer_get_end_iter(txtbuffer, &end); - gtk_text_buffer_delete(txtbuffer, &start, &end); - while (fgets(buf, 255, in) && (*buf != '\0')) { - gtk_text_buffer_get_end_iter(txtbuffer, &end); - gtk_text_buffer_insert(txtbuffer, &end, buf, strlen(buf)); - } - fclose(in); - gmdb_sql_set_file(xml, file_path); -} -static void -gmdb_sql_tree_populate(MdbHandle *mdb, GladeXML *xml) -{ -int i; -MdbCatalogEntry *entry; -GtkTreeIter *iter2; - - GtkWidget *tree = glade_xml_get_widget(xml, "sql_treeview"); - GtkTreeStore *store = (GtkTreeStore *) gtk_tree_view_get_model(GTK_TREE_VIEW(tree)); - - /* add all user tables in catalog to tab */ - for (i=0; i < mdb->num_catalog; i++) { - entry = g_ptr_array_index (mdb->catalog, i); - if (mdb_is_user_table(entry)) { - iter2 = g_malloc(sizeof(GtkTreeIter)); - gtk_tree_store_append(store, iter2, NULL); - gtk_tree_store_set(store, iter2, 0, entry->object_name, -1); - } - } /* for */ -} -#else - -void -gmdb_sql_new_cb (GtkWidget *w, gpointer data) { - GtkWidget* dlg = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (w)), - GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, - _("SQL support was not built.\nMake sure flex and yacc are installed at build time.")); - gtk_dialog_run (GTK_DIALOG (dlg)); - gtk_widget_destroy (dlg); -} - -#endif diff --git a/src/gmdb2/table.c b/src/gmdb2/table.c deleted file mode 100644 index 8e129f0..0000000 --- a/src/gmdb2/table.c +++ /dev/null @@ -1,199 +0,0 @@ -/* MDB Tools - A library for reading MS Access database file - * Copyright (C) 2000 Brian Bruns - * - * 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 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include -#include -#include "gmdb.h" - -extern GladeXML* mainwin_xml; -extern MdbHandle *mdb; -int selected_table = -1; - -/* callbacks */ -void -gmdb_table_debug_cb(GtkList *list, GtkWidget *w, gpointer data) -{ -MdbCatalogEntry *entry; - - /* nothing selected yet? */ - if (selected_table==-1) { - return; - } - - entry = g_ptr_array_index(mdb->catalog,selected_table); - gmdb_debug_new_cb(w, (gpointer) &entry->table_pg); -} -void -gmdb_table_def_cb(GtkList *list, GtkWidget *w, gpointer data) -{ -MdbCatalogEntry *entry; - - /* nothing selected yet? */ - if (selected_table==-1) { - return; - } - - entry = g_ptr_array_index(mdb->catalog,selected_table); - - gmdb_table_def_new(entry); -} -void -gmdb_table_export_cb(GtkList *list, GtkWidget *w, gpointer data) -{ -MdbCatalogEntry *entry; - - /* nothing selected yet? */ - if (selected_table==-1) { - return; - } - - entry = g_ptr_array_index(mdb->catalog,selected_table); - - gmdb_table_export(entry); -} -void -gmdb_table_data_cb(GtkList *list, GtkWidget *w, gpointer data) -{ -MdbCatalogEntry *entry; - - /* nothing selected yet? */ - if (selected_table==-1) { - return; - } - - entry = g_ptr_array_index(mdb->catalog,selected_table); - - gmdb_table_data_new(entry); -} - -void -gmdb_table_select_cb (GtkIconView* giv, gpointer data) { - int i; - MdbCatalogEntry *entry; - gchar *text; - GList *selection; - GtkTreeModel *store; - GtkTreePath *path; - GtkTreeIter iter; - - selected_table = -1; - - selection = gtk_icon_view_get_selected_items (giv); - if (g_list_length (selection) < 1) { - gmdb_table_set_sensitive (FALSE); - g_list_free (selection); - return; - } - - store = gtk_icon_view_get_model (giv); - path = (GtkTreePath*) selection->data; - if (!gtk_tree_model_get_iter (store, &iter, path)) { - /* FIXME */ - g_error ("Failed to get selection iter!!!"); - g_list_foreach (selection, (GFunc) gtk_tree_path_free, NULL); - g_list_free (selection); - } - - gtk_tree_model_get (store, &iter, 1, &text, -1); - for (i=0;inum_catalog;i++) { - entry = g_ptr_array_index(mdb->catalog,i); - if (entry->object_type==MDB_TABLE && - !strcmp(entry->object_name,text)) { - selected_table = i; - } - } - g_free (text); - if (selected_table>0) { - gmdb_table_set_sensitive(TRUE); - } else { - gmdb_table_set_sensitive(FALSE); - } - - g_list_foreach (selection, (GFunc) gtk_tree_path_free, NULL); - g_list_free (selection); -} - -static gboolean -gmdb_table_popup_cb (GtkIconView* giv, GdkEvent* event, gpointer data) { - GtkWidget* menu = GTK_WIDGET (data); - GdkEventButton *event_button; - - if (event->type == GDK_BUTTON_PRESS) { - event_button = (GdkEventButton *) event; - if (event_button->button == 3) { - GtkTreePath *path = gtk_icon_view_get_path_at_pos (giv, (gint) event_button->x, (gint) event_button->y); - if (path) { - gtk_icon_view_select_path (giv, path); - gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, event_button->button, event_button->time); - return TRUE; - } - } - } - return FALSE; -} -/* functions */ -void -gmdb_table_set_sensitive(gboolean b) -{ - GtkWidget *button; - - button = (GtkWidget *) glade_xml_get_widget (mainwin_xml, "table_definition"); - gtk_widget_set_sensitive(button,b); - - button = (GtkWidget *) glade_xml_get_widget (mainwin_xml, "table_data"); - gtk_widget_set_sensitive(button,b); - - button = (GtkWidget *) glade_xml_get_widget (mainwin_xml, "table_export"); - gtk_widget_set_sensitive(button,b); -} -void -gmdb_table_init_popup (GtkWidget* w) { -GtkWidget *menu, *mi; - GtkIconView *giv = GTK_ICON_VIEW (w); - - menu = gtk_menu_new(); - gtk_widget_show(menu); - mi = gtk_menu_item_new_with_label("Definition"); - gtk_widget_show(mi); - g_signal_connect_swapped (G_OBJECT (mi), "activate", - G_CALLBACK (gmdb_table_def_cb), giv); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); - mi = gtk_menu_item_new_with_label("Data"); - gtk_widget_show(mi); - g_signal_connect_swapped (G_OBJECT (mi), "activate", - G_CALLBACK (gmdb_table_data_cb), giv); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); - mi = gtk_menu_item_new_with_label("Export"); - gtk_widget_show(mi); - g_signal_connect_swapped (G_OBJECT (mi), "activate", - G_CALLBACK (gmdb_table_export_cb), giv); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); - mi = gtk_separator_menu_item_new(); - gtk_widget_show(mi); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); - mi = gtk_menu_item_new_with_label("Debug"); - gtk_widget_show(mi); - g_signal_connect_swapped (G_OBJECT (mi), "activate", - G_CALLBACK (gmdb_table_debug_cb), giv); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); - //mi = gtk_menu_item_new_with_label("Usage Map"); - //gtk_widget_show(mi); - //gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); - - g_signal_connect (giv, "button_press_event", G_CALLBACK (gmdb_table_popup_cb), menu); -} diff --git a/src/gmdb2/table_data.c b/src/gmdb2/table_data.c deleted file mode 100644 index 3257065..0000000 --- a/src/gmdb2/table_data.c +++ /dev/null @@ -1,120 +0,0 @@ -/* MDB Tools - A library for reading MS Access database file - * Copyright (C) 2000 Brian Bruns - * - * 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 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include "gmdb.h" - -extern GtkWidget *app; -extern MdbHandle *mdb; - -typedef struct GMdbDataWindow { - gchar table_name[MDB_MAX_OBJ_NAME]; - GtkWidget *window; -} GMdbDataWindow; - -static GList *window_list; - -/* callbacks */ -static gint -gmdb_table_data_close(GtkWidget *w, GdkEvent *event, GMdbDataWindow *dataw) -{ - window_list = g_list_remove(window_list, dataw); - g_free(dataw); - return FALSE; -} -/* functions */ -GtkWidget * -gmdb_table_data_new(MdbCatalogEntry *entry) -{ -MdbTableDef *table; -MdbColumn *col; -GtkWidget *clist; -GtkWidget *scroll; -int i; -long row, maxrow; -gchar *bound_data[256]; -GMdbDataWindow *dataw = NULL; - - - /* do we have an active window for this object? if so raise it */ - for (i=0;itable_name, entry->object_name)) { - gdk_window_raise (dataw->window->window); - return dataw->window; - } - } - - dataw = g_malloc(sizeof(GMdbDataWindow)); - strcpy(dataw->table_name, entry->object_name); - - dataw->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_title(GTK_WINDOW(dataw->window), entry->object_name); - gtk_widget_set_usize(dataw->window, 300,200); - gtk_widget_set_uposition(dataw->window, 50,50); - gtk_widget_show(dataw->window); - - gtk_signal_connect (GTK_OBJECT (dataw->window), "delete_event", - GTK_SIGNAL_FUNC (gmdb_table_data_close), dataw); - - - scroll = gtk_scrolled_window_new(NULL,NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_widget_show (scroll); - gtk_container_add(GTK_CONTAINER(dataw->window), scroll); - - /* read table */ - table = mdb_read_table(entry); - mdb_read_columns(table); - mdb_rewind_table(table); - - clist = gtk_clist_new(table->num_cols); - gtk_widget_show(clist); - gtk_container_add(GTK_CONTAINER(scroll),clist); - - for (i=0;inum_cols;i++) { - /* bind columns */ - bound_data[i] = (char *) g_malloc0(MDB_BIND_SIZE); - mdb_bind_column(table, i+1, bound_data[i], NULL); - - /* display column titles */ - col=g_ptr_array_index(table->columns,i); - gtk_clist_set_column_title(GTK_CLIST(clist), i, col->name); - } - gtk_clist_column_titles_show(GTK_CLIST(clist)); - - maxrow = gmdb_prefs_get_maxrows(); - - /* fetch those rows! */ - row = 0; - while(mdb_fetch_row(table) && - (!maxrow || (row < maxrow))) { - row++; - gtk_clist_append(GTK_CLIST(clist), bound_data); - } - - /* free the memory used to bind */ - for (i=0;inum_cols;i++) { - g_free(bound_data[i]); - } - - /* add this one to the window list */ - window_list = g_list_append(window_list, dataw); - - return dataw->window; -} diff --git a/src/gmdb2/table_def.c b/src/gmdb2/table_def.c deleted file mode 100644 index ac94639..0000000 --- a/src/gmdb2/table_def.c +++ /dev/null @@ -1,535 +0,0 @@ -/* MDB Tools - A library for reading MS Access database file - * Copyright (C) 2000-2012 Brian Bruns and others - * - * 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 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include "gmdb.h" - -#define COL_PK 0 -#define COL_NAME 1 -#define COL_TYPE 2 -#define COL_TYPETEXT 3 -#define COL_DESCRIPTION 4 -#define COL_LEN 5 -#define COL_FORMAT 6 -#define COL_DECIMALPLACES 7 -#define COL_INPUTMASK 8 -#define COL_CAPTION 9 -#define COL_DEFAULTVALUE 10 -#define COL_VALIDATIONRULE 11 -#define COL_VALIDATIONTEXT 12 -#define COL_REQUIRED 13 -#define COL_ALLOWZEROLENGTH 14 - -static void update_bottom_properties(GtkTreeView *treeview, GladeXML *xml); - -typedef struct GMdbDefWindow { - gchar table_name[MDB_MAX_OBJ_NAME]; - GtkWidget *window; -} GMdbDefWindow; - -static GList *window_list; - -/* callbacks */ -static gint -gmdb_table_def_close(GtkList *list, GtkWidget *w, GMdbDefWindow *defw) -{ - window_list = g_list_remove(window_list, defw); - g_free(defw); - return FALSE; -} - -static gint -gmdb_table_def_cursorchanged(GtkTreeView *treeview, GladeXML *xml) -{ - update_bottom_properties(treeview, xml); - return FALSE; -} - -void -gmdb_table_def_new(MdbCatalogEntry *entry) -{ -/* FIXME: many reference should be freed */ -GladeXML *xml; -GtkWindow *win; -GtkTreeView *treeview; -GtkListStore *store; -GtkTreeModel *model; -GtkTreeIter iter; -GtkTreeSelection *selection; -int i, j; -GMdbDefWindow *defw; -MdbTableDef *table; -MdbColumn *col; -const char *propval; -MdbIndex *idx; -GdkPixbuf *pixbuf; - - /* do we have an active window for this object? if so raise it */ - for (i=0;itable_name, entry->object_name) && entry->object_type == MDB_TABLE) { - gdk_window_raise (defw->window->window); - return; - } - } - - /* load the interface */ - xml = glade_xml_new(GMDB_GLADEDIR "gmdb-tabledef.glade", NULL, NULL); - glade_xml_signal_autoconnect(xml); - win = GTK_WINDOW(glade_xml_get_widget(xml, "window1")); - - gtk_window_set_title(win, entry->object_name); - gtk_window_set_default_size(win, 600, 400); - - /* icon to be used as primary key member indicator */ - pixbuf = gdk_pixbuf_new_from_file(GMDB_ICONDIR "pk.xpm", NULL); - - store = gtk_list_store_new(15, - GDK_TYPE_PIXBUF, /* part of primary key */ - G_TYPE_STRING, /* column name */ - G_TYPE_INT, /* type */ - G_TYPE_STRING, /* type as text */ - G_TYPE_STRING, /* description */ - G_TYPE_INT, /* length */ - G_TYPE_STRING, /* format */ - G_TYPE_INT, /* decimal places */ - G_TYPE_STRING, /* inputmask */ - G_TYPE_STRING, /* caption */ - G_TYPE_STRING, /* default value */ - G_TYPE_STRING, /* validation rule */ - G_TYPE_STRING, /* validation text */ - G_TYPE_BOOLEAN, /* required */ - G_TYPE_BOOLEAN /* allow zero length */ - ); - - /* read table */ - table = mdb_read_table(entry); - mdb_read_columns(table); - mdb_rewind_table(table); - - for (i=0;inum_cols;i++) { - int required = 0; - gtk_list_store_append (store, &iter); - col=g_ptr_array_index(table->columns,i); - gtk_list_store_set (store, &iter, - COL_NAME, col->name, - COL_TYPE, col->col_type, - COL_TYPETEXT, mdb_get_colbacktype_string(col), - COL_LEN, col->col_size, - COL_REQUIRED, 0, - -1); - - propval = mdb_col_get_prop(col, "Description"); - if (propval) - gtk_list_store_set (store, &iter, - COL_DESCRIPTION, propval, - -1); - - propval = mdb_col_get_prop(col, "Format"); - if (propval) - gtk_list_store_set (store, &iter, - COL_FORMAT, propval, - -1); - - propval = mdb_col_get_prop(col, "DecimalPlaces"); - if (propval) - gtk_list_store_set (store, &iter, - COL_DECIMALPLACES, atoi(propval), - -1); - - propval = mdb_col_get_prop(col, "InputMask"); - if (propval) - gtk_list_store_set (store, &iter, - COL_INPUTMASK, propval, - -1); - - propval = mdb_col_get_prop(col, "Caption"); - if (propval) - gtk_list_store_set (store, &iter, - COL_CAPTION, propval, - -1); - - propval = mdb_col_get_prop(col, "DefaultValue"); - if (propval) - gtk_list_store_set (store, &iter, - COL_DEFAULTVALUE, propval, - -1); - - propval = mdb_col_get_prop(col, "ValidationRule"); - if (propval) - gtk_list_store_set (store, &iter, - COL_VALIDATIONRULE, propval, - -1); - - propval = mdb_col_get_prop(col, "ValidationText"); - if (propval) - gtk_list_store_set (store, &iter, - COL_VALIDATIONTEXT, propval, - -1); - - propval = mdb_col_get_prop(col, "AllowZeroLength"); - if (propval) - gtk_list_store_set (store, &iter, - COL_ALLOWZEROLENGTH, propval, - -1); - - if (col->col_type == MDB_BOOL) - required = 1; - else { - propval = mdb_col_get_prop(col, "Required"); - if (propval && propval[0]=='y') - required = 1; - } - gtk_list_store_set (store, &iter, - COL_REQUIRED, required, - -1); - } - - model = GTK_TREE_MODEL(store); - mdb_read_indices(table); - for (i=0;inum_idxs;i++) { - idx = g_ptr_array_index (table->indices, i); - if (idx->index_type==1) - for (j=0;jnum_keys;j++) { - gtk_tree_model_iter_nth_child(model, &iter, NULL, idx->key_col_num[j]-1); - gtk_list_store_set (store, &iter, - COL_PK, pixbuf, - -1); - } - } - - - treeview = GTK_TREE_VIEW(glade_xml_get_widget(xml, "columns_treeview")); - gtk_tree_view_insert_column_with_attributes (treeview, - -1, - "PK", gtk_cell_renderer_pixbuf_new(), - "pixbuf", COL_PK, - NULL); - gtk_tree_view_insert_column_with_attributes (treeview, - -1, - "Name", gtk_cell_renderer_text_new(), - "text", COL_NAME, - NULL); - gtk_tree_view_insert_column_with_attributes (treeview, - -1, - "Type", gtk_cell_renderer_text_new(), - "text", COL_TYPETEXT, - NULL); - gtk_tree_view_insert_column_with_attributes (treeview, - -1, - "Description", gtk_cell_renderer_text_new(), - "text", COL_DESCRIPTION, - NULL); - - gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), model); - - /* The tree view has acquired its own reference to the - * model, so we can drop ours. That way the model will - * be freed automatically when the tree view is destroyed */ - g_object_unref (model); - - /* select first item */ - gtk_tree_model_iter_nth_child(model, &iter, NULL, 0); - selection = gtk_tree_view_get_selection(treeview); - gtk_tree_selection_select_iter(selection, &iter); - update_bottom_properties(treeview, xml); - - gtk_widget_show(GTK_WIDGET(win)); - - defw = g_malloc(sizeof(GMdbDefWindow)); - strcpy(defw->table_name, entry->object_name); - defw->window = GTK_WIDGET(win); - window_list = g_list_append(window_list, defw); - - gtk_signal_connect (GTK_OBJECT (treeview), "cursor-changed", - GTK_SIGNAL_FUNC (gmdb_table_def_cursorchanged), xml); - gtk_signal_connect (GTK_OBJECT (defw->window), "delete_event", - GTK_SIGNAL_FUNC (gmdb_table_def_close), defw); -} - -/* That function is called when selection is changed - * It updates the window bottom information - */ -static void -update_bottom_properties_selected(GtkTreeModel *model, - GtkTreePath *path, - GtkTreeIter *iter, - GladeXML *xml) -{ -char tmp[20]; -gint col_type; -gint size; -char *format; -gint decimalplaces; -char *inputmask; -char *caption; -char *defaultvalue; -char *validationrule; -char *validationtext; -gboolean required; -gboolean allowzerolength; -GtkLabel *label; -GtkEntry *entry; - - gtk_tree_model_get(model, iter, - COL_TYPE, &col_type, - COL_LEN, &size, - COL_FORMAT, &format, - COL_DECIMALPLACES, &decimalplaces, - COL_INPUTMASK, &inputmask, - COL_CAPTION, &caption, - COL_DEFAULTVALUE, &defaultvalue, - COL_VALIDATIONRULE, &validationrule, - COL_VALIDATIONTEXT, &validationtext, - COL_REQUIRED, &required, - COL_ALLOWZEROLENGTH, &allowzerolength, - -1); - - //fprintf(stderr, "type=%d\n", col_type); - label = GTK_LABEL(glade_xml_get_widget(xml, "size_label")); - entry = GTK_ENTRY(glade_xml_get_widget(xml, "size_entry")); - switch (col_type) { - //case MDB_BOOL: - case MDB_BYTE: - case MDB_INT: - case MDB_LONGINT: - case MDB_MONEY: - case MDB_FLOAT: - case MDB_DOUBLE: - case MDB_DATETIME: - //case MDB_BINARY: - //case MDB_TEXT: - //case MDB_OLE: - //case MDB_MEMO: - //case MDB_REPID: - //case MDB_NUMERIC: - //case MDB_COMPLEX: - gtk_widget_show(GTK_WIDGET(label)); - gtk_widget_show(GTK_WIDGET(entry)); - sprintf(tmp, "%d", size); - gtk_entry_set_text(entry, tmp); - break; - default: - gtk_widget_hide(GTK_WIDGET(label)); - gtk_widget_hide(GTK_WIDGET(entry)); - } - - label = GTK_LABEL(glade_xml_get_widget(xml, "format_label")); - entry = GTK_ENTRY(glade_xml_get_widget(xml, "format_entry")); - switch (col_type) { - case MDB_BOOL: - case MDB_BYTE: - case MDB_INT: - case MDB_LONGINT: - case MDB_MONEY: - case MDB_FLOAT: - case MDB_DOUBLE: - case MDB_DATETIME: - //case MDB_BINARY: - case MDB_TEXT: - //case MDB_OLE: - case MDB_MEMO: - //case MDB_REPID: - //case MDB_NUMERIC: - //case MDB_COMPLEX: - gtk_widget_show(GTK_WIDGET(label)); - gtk_widget_show(GTK_WIDGET(entry)); - sprintf(tmp, "%d", size); - gtk_entry_set_text(entry, format ? format : ""); - break; - default: - gtk_widget_hide(GTK_WIDGET(label)); - gtk_widget_hide(GTK_WIDGET(entry)); - } - g_free(format); - - label = GTK_LABEL(glade_xml_get_widget(xml, "decimalplaces_label")); - entry = GTK_ENTRY(glade_xml_get_widget(xml, "decimalplaces_entry")); - switch (col_type) { - case MDB_BYTE: - case MDB_INT: - case MDB_LONGINT: - case MDB_FLOAT: - case MDB_DOUBLE: - gtk_widget_show(GTK_WIDGET(label)); - gtk_widget_show(GTK_WIDGET(entry)); - if (decimalplaces) { - sprintf(tmp, "%d", decimalplaces); - gtk_entry_set_text(entry, tmp); - } else - gtk_entry_set_text(entry, ""); - break; - default: - gtk_widget_hide(GTK_WIDGET(label)); - gtk_widget_hide(GTK_WIDGET(entry)); - } - - label = GTK_LABEL(glade_xml_get_widget(xml, "inputmask_label")); - entry = GTK_ENTRY(glade_xml_get_widget(xml, "inputmask_entry")); - switch (col_type) { - //case MDB_BOOL: - case MDB_BYTE: - case MDB_INT: - case MDB_LONGINT: - case MDB_MONEY: - case MDB_FLOAT: - case MDB_DOUBLE: - case MDB_DATETIME: - //case MDB_BINARY: - case MDB_TEXT: - //case MDB_OLE: - case MDB_MEMO: - //case MDB_REPID: - //case MDB_NUMERIC: - //case MDB_COMPLEX: - gtk_widget_show(GTK_WIDGET(label)); - gtk_widget_show(GTK_WIDGET(entry)); - gtk_entry_set_text(entry, inputmask ? inputmask : ""); - break; - default: - gtk_widget_hide(GTK_WIDGET(label)); - gtk_widget_hide(GTK_WIDGET(entry)); - } - g_free(inputmask); - - entry = GTK_ENTRY(glade_xml_get_widget(xml, "caption_entry")); - gtk_entry_set_text(entry, caption ? caption : ""); - g_free(caption); - - label = GTK_LABEL(glade_xml_get_widget(xml, "defaultvalue_label")); - entry = GTK_ENTRY(glade_xml_get_widget(xml, "defaultvalue_entry")); - switch (col_type) { - case MDB_BOOL: - case MDB_BYTE: - case MDB_INT: - case MDB_LONGINT: - case MDB_MONEY: - case MDB_FLOAT: - case MDB_DOUBLE: - case MDB_DATETIME: - //case MDB_BINARY: - case MDB_TEXT: - //case MDB_OLE: - //case MDB_MEMO: - //case MDB_REPID: - //case MDB_NUMERIC: - //case MDB_COMPLEX: - gtk_widget_show(GTK_WIDGET(label)); - gtk_widget_show(GTK_WIDGET(entry)); - gtk_entry_set_text(entry, defaultvalue ? defaultvalue : ""); - default: - gtk_widget_hide(GTK_WIDGET(label)); - gtk_widget_hide(GTK_WIDGET(entry)); - } - g_free(defaultvalue); - - label = GTK_LABEL(glade_xml_get_widget(xml, "validationrule_label")); - entry = GTK_ENTRY(glade_xml_get_widget(xml, "validationrule_entry")); - switch (col_type) { - case MDB_BOOL: - case MDB_BYTE: - case MDB_INT: - case MDB_LONGINT: - case MDB_MONEY: - case MDB_FLOAT: - case MDB_DOUBLE: - case MDB_DATETIME: - //case MDB_BINARY: - case MDB_TEXT: - //case MDB_OLE: - case MDB_MEMO: - //case MDB_REPID: - //case MDB_NUMERIC: - //case MDB_COMPLEX: - gtk_widget_show(GTK_WIDGET(label)); - gtk_widget_show(GTK_WIDGET(entry)); - gtk_entry_set_text(entry, validationrule ? validationrule : ""); - break; - default: - gtk_widget_hide(GTK_WIDGET(label)); - gtk_widget_hide(GTK_WIDGET(entry)); - } - g_free(validationrule); - - label = GTK_LABEL(glade_xml_get_widget(xml, "validationtext_label")); - entry = GTK_ENTRY(glade_xml_get_widget(xml, "validationtext_entry")); - switch (col_type) { - case MDB_BOOL: - case MDB_BYTE: - case MDB_INT: - case MDB_LONGINT: - case MDB_MONEY: - case MDB_FLOAT: - case MDB_DOUBLE: - case MDB_DATETIME: - //case MDB_BINARY: - case MDB_TEXT: - //case MDB_OLE: - case MDB_MEMO: - //case MDB_REPID: - //case MDB_NUMERIC: - //case MDB_COMPLEX: - gtk_widget_show(GTK_WIDGET(label)); - gtk_widget_show(GTK_WIDGET(entry)); - gtk_entry_set_text(entry, validationtext ? validationtext : ""); - break; - default: - gtk_widget_hide(GTK_WIDGET(label)); - gtk_widget_hide(GTK_WIDGET(entry)); - } - g_free(validationtext); - - entry = GTK_ENTRY(glade_xml_get_widget(xml, "required_entry")); - gtk_entry_set_text(entry, required ? "Yes" : "No"); - - label = GTK_LABEL(glade_xml_get_widget(xml, "allowzerolength_label")); - entry = GTK_ENTRY(glade_xml_get_widget(xml, "allowzerolength_entry")); - switch (col_type) { - //case MDB_BOOL: - //case MDB_BYTE: - //case MDB_INT: - //case MDB_LONGINT: - //case MDB_MONEY: - //case MDB_FLOAT: - //case MDB_DOUBLE: - //case MDB_DATETIME: - //case MDB_BINARY: - case MDB_TEXT: - //case MDB_OLE: - case MDB_MEMO: - //case MDB_REPID: - //case MDB_NUMERIC: - //case MDB_COMPLEX: - gtk_widget_show(GTK_WIDGET(label)); - gtk_widget_show(GTK_WIDGET(entry)); - gtk_entry_set_text(entry, allowzerolength ? "Yes" : "No"); - break; - default: - gtk_widget_hide(GTK_WIDGET(label)); - gtk_widget_hide(GTK_WIDGET(entry)); - } -} - -static void -update_bottom_properties(GtkTreeView *treeview, GladeXML *xml) { -GtkTreeSelection *selection; - - selection = gtk_tree_view_get_selection(treeview); - gtk_tree_selection_selected_foreach(selection, - (GtkTreeSelectionForeachFunc)update_bottom_properties_selected, - xml); -} diff --git a/src/gmdb2/table_export.c b/src/gmdb2/table_export.c deleted file mode 100644 index a8a9590..0000000 --- a/src/gmdb2/table_export.c +++ /dev/null @@ -1,326 +0,0 @@ -/* MDB Tools - A library for reading MS Access database file - * Copyright (C) 2000 Brian Bruns - * - * 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 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include -#include -#include -#include -#include "gmdb.h" - -extern GtkWidget *app; -extern MdbHandle *mdb; -GladeXML *exportwin_xml; -MdbCatalogEntry *cat_entry; - -#define COMMA "Comma (,)" -#define TAB "Tab" -#define SPACE "Space" -#define COLON "Colon (:)" -#define SEMICOLON "Semicolon (;)" -#define PIPE "Pipe (|)" - -#define LF "Unix (linefeed only)" -#define CR "Mac (carriage return only)" -#define CRLF "Windows (CR + LF)" - -#define ALWAYS "Always" -#define NEVER "Never" -#define AUTOMAT "Automatic (where necessary)" - -#define NOQUOTE "Don't quote" - -#define BIN_STRIP "Strip" -#define BIN_RAW "Raw" -#define BIN_OCTAL "Octal" -#define BIN_HEXADECIMAL "Hexademical" - -void -gmdb_export_get_delimiter(GladeXML *xml, gchar *delimiter, int max_buf) -{ - GtkComboBox *combobox; - gchar *str; - - combobox = GTK_COMBO_BOX(glade_xml_get_widget(xml, "sep_combo")); - str = gtk_combo_box_get_active_text(combobox); - if (!strcmp(str,COMMA)) - strncpy(delimiter, ",", max_buf); - else if (!strcmp(str,TAB)) - strncpy(delimiter, "\t", max_buf); - else if (!strcmp(str,SPACE)) - strncpy(delimiter, " ", max_buf); - else if (!strcmp(str,COLON)) - strncpy(delimiter, ":", max_buf); - else if (!strcmp(str,SEMICOLON)) - strncpy(delimiter, ";", max_buf); - else if (!strcmp(str,PIPE)) - strncpy(delimiter, "|", max_buf); - else - strncpy(delimiter, str, max_buf); - if (max_buf) - delimiter[max_buf-1] = '\0'; -} - -void -gmdb_export_get_lineterm(GladeXML *xml, gchar *lineterm, int max_buf) -{ - GtkComboBox *combobox; - gchar *str; - - combobox = GTK_COMBO_BOX(glade_xml_get_widget(xml, "term_combo")); - str = gtk_combo_box_get_active_text (combobox); - if (!strcmp(str,LF)) - strncpy(lineterm, "\n", max_buf); - else if (!strcmp(str,CR)) - strncpy(lineterm, "\r", max_buf); - else if (!strcmp(str,CRLF)) - strncpy(lineterm, "\r\n", max_buf); - if (max_buf) - lineterm[max_buf-1] = '\0'; -} - -void -gmdb_export_get_quotechar(GladeXML *xml, gchar *quotechar, int max_buf) -{ - GtkComboBox *combobox; - gchar *str; - - combobox = GTK_COMBO_BOX(glade_xml_get_widget(xml, "qchar_combo")); - str = gtk_combo_box_get_active_text (combobox); - if (!strcmp(str, NOQUOTE)) - quotechar[0] = '\0'; /* Quoting disabled */ - else - strncpy(quotechar, str, max_buf); - if (max_buf) - quotechar[max_buf-1] = '\0'; -} - -void -gmdb_export_get_escapechar(GladeXML *xml, gchar *escapechar, int max_buf) -{ - GtkComboBox *combobox; - gchar *str; - - combobox = GTK_COMBO_BOX(glade_xml_get_widget(xml, "escchar_combo")); - str = gtk_combo_box_get_active_text (combobox); - strncpy(escapechar, str, max_buf); - if (max_buf) - escapechar[max_buf-1] = '\0'; -} - -int -gmdb_export_get_binmode(GladeXML *xml) -{ - GtkComboBox *combobox; - gchar *str; - - combobox = GTK_COMBO_BOX(glade_xml_get_widget(xml, "bin_combo")); - str = gtk_combo_box_get_active_text (combobox); - - if (!strcmp(str,BIN_STRIP)) - return MDB_BINEXPORT_STRIP; - else if (!strcmp(str,BIN_OCTAL)) - return MDB_BINEXPORT_OCTAL; - else if (!strcmp(str,BIN_HEXADECIMAL)) - return MDB_BINEXPORT_HEXADECIMAL; - else - return MDB_BINEXPORT_RAW; -} - - -int -gmdb_export_get_headers(GladeXML *xml) -{ - GtkWidget *checkbox; - - checkbox = glade_xml_get_widget(xml, "headers_checkbox"); - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbox))) - return 1; - else - return 0; -} -gchar * -gmdb_export_get_filepath(GladeXML *xml) -{ - GtkWidget *fchoose; - - fchoose = glade_xml_get_widget(xml, "filename_entry"); - return (gchar *) gtk_entry_get_text (GTK_ENTRY (fchoose)); -} - -void -gmdb_export_help_cb(GtkWidget *w, gpointer data) -{ - GError *error = NULL; - - gnome_help_display("gmdb.xml", "gmdb-table-export", &error); - if (error != NULL) { - g_warning ("%s", error->message); - g_error_free (error); - } -} - -void -gmdb_table_export_button_cb(GtkWidget *w, gpointer data) -{ -gchar *file_path; -FILE *outfile; -char **bound_values; -int *bound_lens; -MdbTableDef *table; -MdbColumn *col; -int i; -int need_headers = 0; -gchar delimiter[11]; -gchar quotechar[5]; -gchar escape_char[5]; -gchar lineterm[5]; -int bin_mode = MDB_BINEXPORT_RAW; -int rows=0; -char *value; -size_t length; - - GtkWidget *exportwin, *dlg; - - gmdb_export_get_delimiter(exportwin_xml, delimiter, sizeof(delimiter)); - gmdb_export_get_lineterm(exportwin_xml, lineterm, sizeof(lineterm)); - gmdb_export_get_quotechar(exportwin_xml, quotechar, sizeof(quotechar)); - gmdb_export_get_escapechar(exportwin_xml, escape_char, sizeof(escape_char)); - need_headers = gmdb_export_get_headers(exportwin_xml); - bin_mode = gmdb_export_get_binmode(exportwin_xml); - file_path = gmdb_export_get_filepath(exportwin_xml); - - // printf("file path %s\n",file_path); - if ((outfile=fopen(file_path, "w"))==NULL) { - GtkWidget* dlg = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (w)), - GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE, - _("Unable to open file.")); - gtk_dialog_run (GTK_DIALOG (dlg)); - gtk_widget_destroy (dlg); - return; - } - - /* read table */ - table = mdb_read_table(cat_entry); - mdb_read_columns(table); - mdb_rewind_table(table); - - bound_values = (char **) g_malloc(table->num_cols * sizeof(char *)); - bound_lens = (int *) g_malloc(table->num_cols * sizeof(int)); - for (i=0;inum_cols;i++) { - /* bind columns */ - bound_values[i] = (char *) g_malloc0(MDB_BIND_SIZE); - mdb_bind_column(table, i+1, bound_values[i], &bound_lens[i]); - - /* display column titles */ - if (need_headers) { - if (i>0) - fputs(delimiter, outfile); - col=g_ptr_array_index(table->columns,i); - mdb_print_col(outfile, col->name, quotechar[0]!='\0', MDB_TEXT, 0, quotechar, escape_char, bin_mode); - } - } - if (need_headers) fputs(lineterm, outfile); - - /* fetch those rows! */ - while(mdb_fetch_row(table)) { - for (i=0;inum_cols;i++) { - if (i>0) - fputs(delimiter, outfile); - col=g_ptr_array_index(table->columns,i); - /* Don't quote NULLs */ - if (bound_lens[i]) { - if (col->col_type == MDB_OLE) { - value = mdb_ole_read_full(mdb, col, &length); - } else { - value = bound_values[i]; - length = bound_lens[i]; - } - mdb_print_col(outfile, value, quotechar[0]!='\0', col->col_type, length, quotechar, escape_char, bin_mode); - if (col->col_type == MDB_OLE) - free(value); - } - } - fputs(lineterm, outfile); - rows++; - } - - /* free the memory used to bind */ - for (i=0;inum_cols;i++) { - g_free(bound_values[i]); - } - g_free(bound_values); - g_free(bound_lens); - - fclose(outfile); - exportwin = glade_xml_get_widget (exportwin_xml, "export_dialog"); - gtk_widget_destroy(exportwin); - dlg = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (w)), - GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, - _("%d rows successfully exported."), rows); - gtk_dialog_run (GTK_DIALOG (dlg)); - gtk_widget_destroy (dlg); -} -void gmdb_table_export(MdbCatalogEntry *entry) -{ - cat_entry = entry; - - /* load the interface */ - exportwin_xml = glade_xml_new(GMDB_GLADEDIR "gmdb-export.glade", NULL, NULL); - /* connect the signals in the interface */ - glade_xml_signal_autoconnect(exportwin_xml); - gmdb_table_export_populate_dialog(exportwin_xml); -} -void -gmdb_table_export_populate_dialog(GladeXML *xml) -{ - GtkComboBox *combobox; - - /* Populate the widgets */ - combobox = GTK_COMBO_BOX(glade_xml_get_widget(xml, "term_combo")); - gtk_combo_box_append_text(combobox, LF); - gtk_combo_box_append_text(combobox, CR); - gtk_combo_box_append_text(combobox, CRLF); - gtk_combo_box_set_active(combobox, 0); - - combobox = GTK_COMBO_BOX(glade_xml_get_widget(xml, "sep_combo")); - gtk_combo_box_append_text(combobox, COMMA); - gtk_combo_box_append_text(combobox, TAB); - gtk_combo_box_append_text(combobox, SPACE); - gtk_combo_box_append_text(combobox, COLON); - gtk_combo_box_append_text(combobox, SEMICOLON); - gtk_combo_box_append_text(combobox, PIPE); - gtk_combo_box_set_active(combobox, 0); - - combobox = GTK_COMBO_BOX(glade_xml_get_widget(xml, "qchar_combo")); - gtk_combo_box_append_text(combobox, "\""); - gtk_combo_box_append_text(combobox, "'"); - gtk_combo_box_append_text(combobox, "`"); - gtk_combo_box_append_text(combobox, NOQUOTE); - gtk_combo_box_set_active(combobox, 0); - - combobox = GTK_COMBO_BOX(glade_xml_get_widget(xml, "escchar_combo")); - gtk_combo_box_append_text(combobox, "\\"); - gtk_combo_box_set_active(combobox, 0); - - combobox = GTK_COMBO_BOX(glade_xml_get_widget(xml, "bin_combo")); - gtk_combo_box_append_text(combobox, BIN_STRIP); - gtk_combo_box_append_text(combobox, BIN_RAW); - gtk_combo_box_append_text(combobox, BIN_OCTAL); - gtk_combo_box_append_text(combobox, BIN_HEXADECIMAL); - gtk_combo_box_set_active(combobox, 1); -}