aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlessio Treglia <alessio@debian.org>2014-07-21 13:58:18 +0100
committerAlessio Treglia <alessio@debian.org>2014-07-21 13:58:18 +0100
commit6ef14034edff72de856c29dd2e4f2b180444d890 (patch)
tree6586d6a6d6c494ff4c82adfc63154dc8496fd93c /src
Imported Upstream version 0.17upstream/0.17
Diffstat (limited to 'src')
-rw-r--r--src/.cvsignore5
-rw-r--r--src/CVS/Entries18
-rw-r--r--src/CVS/Repository1
-rw-r--r--src/CVS/Root1
-rw-r--r--src/Makefile.am11
-rw-r--r--src/Makefile.in439
-rw-r--r--src/callbacks.c961
-rw-r--r--src/callbacks.h77
-rw-r--r--src/eggtrayicon.c480
-rw-r--r--src/eggtrayicon.h77
-rw-r--r--src/fileio.c439
-rw-r--r--src/fileio.h7
-rw-r--r--src/filter.c493
-rw-r--r--src/filter.h13
-rw-r--r--src/font_6x11.h3337
-rw-r--r--src/interface.h25
-rw-r--r--src/main.c623
-rw-r--r--src/support.c92
-rw-r--r--src/support.h3
-rw-r--r--src/v4l.c252
-rw-r--r--src/v4l.h71
21 files changed, 7425 insertions, 0 deletions
diff --git a/src/.cvsignore b/src/.cvsignore
new file mode 100644
index 0000000..01407ae
--- /dev/null
+++ b/src/.cvsignore
@@ -0,0 +1,5 @@
+Makefile
+Makefile.in
+camorama
+*.o
+.deps
diff --git a/src/CVS/Entries b/src/CVS/Entries
new file mode 100644
index 0000000..32a325b
--- /dev/null
+++ b/src/CVS/Entries
@@ -0,0 +1,18 @@
+/.cvsignore/1.2/Fri Jan 17 01:49:00 2003//
+/filter.h/1.2/Thu Feb 6 03:05:54 2003//
+/font_6x11.h/1.2/Thu Feb 6 03:05:54 2003//
+/interface.h/1.2/Thu Feb 6 03:05:54 2003//
+/Makefile.am/1.4/Fri Jul 25 22:55:50 2003//
+/callbacks.h/1.7/Wed Jul 30 01:42:26 2003//
+/eggtrayicon.c/1.1/Fri Jul 25 22:43:40 2003//
+/eggtrayicon.h/1.1/Fri Jul 25 22:43:27 2003//
+/fileio.h/1.3/Wed Jul 30 01:42:25 2003//
+/support.h/1.3/Wed Jul 30 01:42:27 2003//
+/callbacks.c/1.18/Fri Aug 15 15:32:30 2003//
+/filter.c/1.8/Fri Aug 15 15:03:43 2003//
+/main.c/1.18/Fri Aug 15 15:32:03 2003//
+/v4l.c/1.12/Fri Aug 15 14:25:16 2003//
+/v4l.h/1.7/Fri Aug 15 14:17:41 2003//
+/fileio.c/1.13/Wed Aug 20 18:20:55 2003//
+/support.c/1.4/Wed Aug 20 18:21:12 2003//
+D
diff --git a/src/CVS/Repository b/src/CVS/Repository
new file mode 100644
index 0000000..6dbdc42
--- /dev/null
+++ b/src/CVS/Repository
@@ -0,0 +1 @@
+camorama/src
diff --git a/src/CVS/Root b/src/CVS/Root
new file mode 100644
index 0000000..f253780
--- /dev/null
+++ b/src/CVS/Root
@@ -0,0 +1 @@
+:pserver:ly@cvs.gnome.org:/cvs/gnome
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644
index 0000000..df75c50
--- /dev/null
+++ b/src/Makefile.am
@@ -0,0 +1,11 @@
+INCLUDES = \
+ -DPACKAGE_DATA_DIR=\""$(datadir)"\" \
+ -DDATADIR=\""$(datadir)"\" \
+ -DPACKAGE_LOCALE_DIR=\""$(datadir)/locale"\" \
+ @PACKAGE_CFLAGS@
+
+
+bin_PROGRAMS = camorama
+
+camorama_SOURCES = main.c v4l.c filter.c callbacks.c support.c fileio.c eggtrayicon.c v4l.h callbacks.h support.h interface.h fileio.h font_6x11.h filter.h eggtrayicon.h
+camorama_LDADD = @PACKAGE_LIBS@
diff --git a/src/Makefile.in b/src/Makefile.in
new file mode 100644
index 0000000..f9b6b91
--- /dev/null
+++ b/src/Makefile.in
@@ -0,0 +1,439 @@
+# Makefile.in generated by automake 1.7.6 from Makefile.am.
+# @configure_input@
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMAS_INSTALL_FALSE = @GCONF_SCHEMAS_INSTALL_FALSE@
+GCONF_SCHEMAS_INSTALL_TRUE = @GCONF_SCHEMAS_INSTALL_TRUE@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_CAVES_RULE = @INTLTOOL_CAVES_RULE@
+INTLTOOL_DESKTOP_RULE = @INTLTOOL_DESKTOP_RULE@
+INTLTOOL_DIRECTORY_RULE = @INTLTOOL_DIRECTORY_RULE@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_PONG_RULE = @INTLTOOL_PONG_RULE@
+INTLTOOL_PROP_RULE = @INTLTOOL_PROP_RULE@
+INTLTOOL_SCHEMAS_RULE = @INTLTOOL_SCHEMAS_RULE@
+INTLTOOL_SERVER_RULE = @INTLTOOL_SERVER_RULE@
+INTLTOOL_SHEET_RULE = @INTLTOOL_SHEET_RULE@
+INTLTOOL_SOUNDLIST_RULE = @INTLTOOL_SOUNDLIST_RULE@
+INTLTOOL_THEME_RULE = @INTLTOOL_THEME_RULE@
+INTLTOOL_UI_RULE = @INTLTOOL_UI_RULE@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_CFLAGS = @PACKAGE_CFLAGS@
+PACKAGE_LIBS = @PACKAGE_LIBS@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build_alias = @build_alias@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+INCLUDES = \
+ -DPACKAGE_DATA_DIR=\""$(datadir)"\" \
+ -DDATADIR=\""$(datadir)"\" \
+ -DPACKAGE_LOCALE_DIR=\""$(datadir)/locale"\" \
+ @PACKAGE_CFLAGS@
+
+
+bin_PROGRAMS = camorama
+
+camorama_SOURCES = main.c v4l.c filter.c callbacks.c support.c fileio.c eggtrayicon.c v4l.h callbacks.h support.h interface.h fileio.h font_6x11.h filter.h eggtrayicon.h
+camorama_LDADD = @PACKAGE_LIBS@
+subdir = src
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+bin_PROGRAMS = camorama$(EXEEXT)
+PROGRAMS = $(bin_PROGRAMS)
+
+am_camorama_OBJECTS = main.$(OBJEXT) v4l.$(OBJEXT) filter.$(OBJEXT) \
+ callbacks.$(OBJEXT) support.$(OBJEXT) fileio.$(OBJEXT) \
+ eggtrayicon.$(OBJEXT)
+camorama_OBJECTS = $(am_camorama_OBJECTS)
+camorama_DEPENDENCIES =
+camorama_LDFLAGS =
+
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/callbacks.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/eggtrayicon.Po ./$(DEPDIR)/fileio.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/filter.Po ./$(DEPDIR)/main.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/support.Po ./$(DEPDIR)/v4l.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+DIST_SOURCES = $(camorama_SOURCES)
+DIST_COMMON = Makefile.am Makefile.in
+SOURCES = $(camorama_SOURCES)
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(bindir)
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ if test -f $$p \
+ ; then \
+ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f"; \
+ $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f || exit 1; \
+ else :; fi; \
+ done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
+ rm -f $(DESTDIR)$(bindir)/$$f; \
+ done
+
+clean-binPROGRAMS:
+ -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+camorama$(EXEEXT): $(camorama_OBJECTS) $(camorama_DEPENDENCIES)
+ @rm -f camorama$(EXEEXT)
+ $(LINK) $(camorama_LDFLAGS) $(camorama_OBJECTS) $(camorama_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT) core *.core
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/callbacks.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eggtrayicon.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fileio.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filter.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/support.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/v4l.Po@am__quote@
+
+distclean-depend:
+ -rm -rf ./$(DEPDIR)
+
+.c.o:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+@am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
+@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+@am__fastdepCC_TRUE@ fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
+
+.c.obj:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+@am__fastdepCC_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
+@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+@am__fastdepCC_TRUE@ fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
+uninstall-info-am:
+
+ETAGS = etags
+ETAGSFLAGS =
+
+CTAGS = ctags
+CTAGSFLAGS =
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$tags$$unique" \
+ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique
+
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkinstalldirs) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+
+installdirs:
+ $(mkinstalldirs) $(DESTDIR)$(bindir)
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+
+distclean-am: clean-am distclean-compile distclean-depend \
+ distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+ clean-generic ctags distclean distclean-compile \
+ distclean-depend distclean-generic distclean-tags distdir dvi \
+ dvi-am info info-am install install-am install-binPROGRAMS \
+ install-data install-data-am install-exec install-exec-am \
+ install-info install-info-am install-man install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+ uninstall-am uninstall-binPROGRAMS uninstall-info-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/callbacks.c b/src/callbacks.c
new file mode 100644
index 0000000..8e5ce02
--- /dev/null
+++ b/src/callbacks.c
@@ -0,0 +1,961 @@
+#include <gtk/gtk.h>
+#include <config.h>
+#include "callbacks.h"
+#include "interface.h"
+#include "support.h"
+#include "filter.h"
+#include <gnome.h>
+#include <libgnomeui/gnome-about.h>
+#include <libgnomeui/gnome-propertybox.h>
+#include <libgnomeui/gnome-window-icon.h>
+#include <pthread.h>
+
+extern GtkWidget *main_window, *prefswindow;
+extern state func_state;
+extern int frames;
+extern int frames2;
+extern int seconds;
+extern GtkWidget *dentry, *entry2, *string_entry;
+extern GtkWidget *host_entry,
+ *directory_entry, *filename_entry, *login_entry, *pw_entry;
+int frame;
+
+/*
+ * pref callbacks
+ */
+
+void ts_func (GtkWidget * rb, cam * cam)
+{
+ GConfClient *client;
+
+ client = gconf_client_get_default ();
+ cam->timestamp = gtk_toggle_button_get_active ((GtkToggleButton *) rb);
+ gconf_client_set_bool (cam->gc, KEY4, cam->timestamp, NULL);
+}
+
+void customstring_func (GtkWidget * rb, cam * cam)
+{
+ GConfClient *client;
+
+ client = gconf_client_get_default ();
+ cam->usestring = gtk_toggle_button_get_active ((GtkToggleButton *) rb);
+ gconf_client_set_bool (cam->gc, KEY18, cam->usestring, NULL);
+ gtk_widget_set_sensitive (glade_xml_get_widget
+ (cam->xml, "string_entry"), cam->usestring);
+}
+
+void drawdate_func (GtkWidget * rb, cam * cam)
+{
+ GConfClient *client;
+
+ client = gconf_client_get_default ();
+ cam->usedate = gtk_toggle_button_get_active ((GtkToggleButton *) rb);
+ gconf_client_set_bool (cam->gc, KEY19, cam->usedate, NULL);
+}
+
+void append_func (GtkWidget * rb, cam * cam)
+{
+ GConfClient *client;
+
+ client = gconf_client_get_default ();
+ cam->timefn = gtk_toggle_button_get_active ((GtkToggleButton *) rb);
+ gconf_client_set_bool (cam->gc, KEY14, cam->timefn, NULL);
+
+}
+
+void rappend_func (GtkWidget * rb, cam * cam)
+{
+ GConfClient *client;
+
+ client = gconf_client_get_default ();
+ cam->rtimefn = gtk_toggle_button_get_active ((GtkToggleButton *) rb);
+ gconf_client_set_bool (cam->gc, KEY15, cam->rtimefn, NULL);
+
+}
+
+void jpg_func (GtkWidget * rb, cam * cam)
+{
+ GConfClient *client;
+
+ client = gconf_client_get_default ();
+ cam->savetype = JPEG;
+ gconf_client_set_int (cam->gc, KEY3, cam->savetype, NULL);
+
+}
+
+void png_func (GtkWidget * rb, cam * cam)
+{
+ GConfClient *client;
+
+ client = gconf_client_get_default ();
+ cam->savetype = PNG;
+ gconf_client_set_int (cam->gc, KEY3, cam->savetype, NULL);
+}
+
+void ppm_func (GtkWidget * rb, cam * cam)
+{
+ GConfClient *client;
+
+ client = gconf_client_get_default ();
+ cam->savetype = PPM;
+ gconf_client_set_int (cam->gc, KEY3, cam->savetype, NULL);
+}
+
+void set_sensitive (cam * cam)
+{
+ gtk_widget_set_sensitive (glade_xml_get_widget (cam->xml, "table4"),
+ cam->cap);
+
+ gtk_widget_set_sensitive (glade_xml_get_widget
+ (cam->xml, "appendbutton"), cam->cap);
+ gtk_widget_set_sensitive (glade_xml_get_widget (cam->xml, "tsbutton"),
+ cam->cap);
+ gtk_widget_set_sensitive (glade_xml_get_widget (cam->xml, "jpgb"),
+ cam->cap);
+ gtk_widget_set_sensitive (glade_xml_get_widget (cam->xml, "pngb"),
+ cam->cap);
+ gtk_widget_set_sensitive (glade_xml_get_widget (cam->xml, "table5"),
+ cam->rcap);
+ gtk_widget_set_sensitive (glade_xml_get_widget (cam->xml, "timecb"),
+ cam->rcap);
+ gtk_widget_set_sensitive (glade_xml_get_widget
+ (cam->xml, "tsbutton2"), cam->rcap);
+ gtk_widget_set_sensitive (glade_xml_get_widget (cam->xml, "fjpgb"),
+ cam->rcap);
+ gtk_widget_set_sensitive (glade_xml_get_widget (cam->xml, "fpngb"),
+ cam->rcap);
+ gtk_widget_set_sensitive (glade_xml_get_widget (cam->xml, "hbox20"),
+ cam->acap);
+
+}
+
+void cap_func (GtkWidget * rb, cam * cam)
+{
+ GConfClient *client;
+
+ client = gconf_client_get_default ();
+ cam->cap = gtk_toggle_button_get_active ((GtkToggleButton *) rb);
+
+ gconf_client_set_bool (cam->gc, KEY12, cam->cap, NULL);
+ update_tooltip (cam);
+ set_sensitive (cam);
+
+}
+
+void rcap_func (GtkWidget * rb, cam * cam)
+{
+ GConfClient *client;
+
+ client = gconf_client_get_default ();
+ cam->rcap = gtk_toggle_button_get_active ((GtkToggleButton *) rb);
+ gconf_client_set_bool (cam->gc, KEY13, cam->rcap, NULL);
+ update_tooltip (cam);
+ set_sensitive (cam);
+
+}
+
+void acap_func (GtkWidget * rb, cam * cam)
+{
+ GConfClient *client;
+
+ client = gconf_client_get_default ();
+ cam->acap = gtk_toggle_button_get_active ((GtkToggleButton *) rb);
+
+ gconf_client_set_bool (cam->gc, KEY20, cam->acap, NULL);
+
+ if (cam->acap == TRUE) {
+ cam->timeout_id =
+ gtk_timeout_add (cam->timeout_interval,
+ (GSourceFunc) timeout_capture_func, cam);
+ if (cam->debug == TRUE) {
+ printf ("add autocap - %d - timeout_interval = \n",
+ cam->timeout_id, cam->timeout_interval);
+ }
+ } else {
+ if (cam->debug == TRUE) {
+ printf ("remove autocap - %d - timeout_interval = \n",
+ cam->timeout_id, cam->timeout_interval);
+ }
+ gtk_timeout_remove (cam->timeout_id);
+ }
+ update_tooltip (cam);
+ set_sensitive (cam);
+}
+
+void interval_change (GtkWidget * sb, cam * cam)
+{
+ GConfClient *client;
+
+ client = gconf_client_get_default ();
+ cam->timeout_interval =
+ gtk_spin_button_get_value ((GtkSpinButton *) sb) * 60000;
+ gconf_client_set_int (cam->gc, KEY21, cam->timeout_interval, NULL);
+ if (cam->acap == TRUE) {
+ if (cam->debug == TRUE) {
+ printf
+ ("interval_change; old timeout_id = %d old interval = %d\n",
+ cam->timeout_id, cam->timeout_interval);
+ }
+ gtk_timeout_remove (cam->timeout_id);
+ cam->timeout_id =
+ gtk_timeout_add (cam->timeout_interval,
+ (GSourceFunc) timeout_capture_func, cam);
+ if (cam->debug == TRUE) {
+ printf ("new timeout_id = %d, new interval = %d\n",
+ cam->timeout_id, cam->timeout_interval);
+ }
+ }
+ update_tooltip (cam);
+}
+
+void rjpg_func (GtkWidget * rb, cam * cam)
+{
+ GConfClient *client;
+
+ client = gconf_client_get_default ();
+ cam->rsavetype = JPEG;
+ gconf_client_set_int (cam->gc, KEY10, cam->rsavetype, NULL);
+
+}
+
+void rpng_func (GtkWidget * rb, cam * cam)
+{
+ GConfClient *client;
+
+ client = gconf_client_get_default ();
+ cam->rsavetype = PNG;
+ gconf_client_set_int (cam->gc, KEY10, cam->rsavetype, NULL);
+}
+
+void rppm_func (GtkWidget * rb, cam * cam)
+{
+ GConfClient *client;
+
+ client = gconf_client_get_default ();
+ cam->rsavetype = PPM;
+ gconf_client_set_int (cam->gc, KEY10, cam->rsavetype, NULL);
+}
+
+void rts_func (GtkWidget * rb, cam * cam)
+{
+ GConfClient *client;
+
+ client = gconf_client_get_default ();
+ cam->rtimestamp = gtk_toggle_button_get_active ((GtkToggleButton *) rb);
+ gconf_client_set_bool (cam->gc, KEY11, cam->rtimestamp, NULL);
+
+}
+
+void
+gconf_notify_func (GConfClient * client, guint cnxn_id, GConfEntry * entry,
+ char *str)
+{
+ GConfValue *value;
+
+ value = gconf_entry_get_value (entry);
+ str = g_strdup (gconf_value_get_string (value));
+
+}
+
+void
+gconf_notify_func_bool (GConfClient * client, guint cnxn_id,
+ GConfEntry * entry, gboolean val)
+{
+ GConfValue *value;
+ value = gconf_entry_get_value (entry);
+ val = gconf_value_get_bool (value);
+
+}
+
+void
+gconf_notify_func_int (GConfClient * client, guint cnxn_id,
+ GConfEntry * entry, int val)
+{
+ GConfValue *value;
+ value = gconf_entry_get_value (entry);
+ val = gconf_value_get_int (value);
+
+}
+
+int delete_event (GtkWidget * widget, gpointer data)
+{
+ gtk_main_quit ();
+ return FALSE;
+}
+
+/*
+ * apply preferences
+ */
+void prefs_func (GtkWidget * okbutton, cam * cam)
+{
+ GConfClient *client;
+
+ client = gconf_client_get_default ();
+
+ if (gnome_file_entry_get_full_path ((GnomeFileEntry *) dentry, TRUE)
+ != NULL) {
+ cam->pixdir = g_strdup ((gchar *)
+ gnome_file_entry_get_full_path ((GnomeFileEntry *) dentry, FALSE));
+ gconf_client_set_string (cam->gc, KEY1, cam->pixdir, NULL);
+
+ } else {
+ if (cam->debug == TRUE) {
+ fprintf (stderr, "null directory\ndirectory unchanged.");
+ }
+ }
+
+ /*
+ * this is stupid, even if the string is empty, it will not return NULL
+ */
+ if (strlen (gtk_entry_get_text ((GtkEntry *) entry2)) > 0) {
+ cam->capturefile =
+ g_strdup (gtk_entry_get_text ((GtkEntry *) entry2));
+ gconf_client_set_string (cam->gc, KEY2, cam->capturefile, NULL);
+ }
+
+ if (strlen (gtk_entry_get_text ((GtkEntry *) host_entry)) > 0) {
+ cam->rhost = g_strdup (gtk_entry_get_text ((GtkEntry *) host_entry));
+ gconf_client_set_string (cam->gc, KEY5, cam->rhost, NULL);
+ }
+ if (strlen (gtk_entry_get_text ((GtkEntry *) login_entry)) > 0) {
+ cam->rlogin =
+ g_strdup (gtk_entry_get_text ((GtkEntry *) login_entry));
+ gconf_client_set_string (cam->gc, KEY6, cam->rlogin, NULL);
+ }
+ if (strlen (gtk_entry_get_text ((GtkEntry *) pw_entry)) > 0) {
+ cam->rpw = g_strdup (gtk_entry_get_text ((GtkEntry *) pw_entry));
+ gconf_client_set_string (cam->gc, KEY7, cam->rpw, NULL);
+ }
+ if (strlen (gtk_entry_get_text ((GtkEntry *) directory_entry)) > 0) {
+ cam->rpixdir =
+ g_strdup (gtk_entry_get_text ((GtkEntry *) directory_entry));
+ gconf_client_set_string (cam->gc, KEY8, cam->rpixdir, NULL);
+ }
+ if (strlen (gtk_entry_get_text ((GtkEntry *) filename_entry)) > 0) {
+ cam->rcapturefile =
+ g_strdup (gtk_entry_get_text ((GtkEntry *) filename_entry));
+ gconf_client_set_string (cam->gc, KEY9, cam->rcapturefile, NULL);
+ }
+ if (strlen (gtk_entry_get_text ((GtkEntry *) string_entry)) > 0) {
+ cam->ts_string =
+ g_strdup (gtk_entry_get_text ((GtkEntry *) string_entry));
+ gconf_client_set_string (cam->gc, KEY16, cam->ts_string, NULL);
+ }
+ if (cam->debug == TRUE) {
+ fprintf (stderr, "dir now = %s\nfile now = %s\n", cam->pixdir,
+ cam->capturefile);
+ }
+ gtk_widget_hide (prefswindow);
+
+}
+
+void on_quit1_activate (GtkMenuItem * menuitem, gpointer user_data)
+{
+ gtk_main_quit ();
+}
+
+void on_preferences1_activate (GtkMenuItem * menuitem, gpointer user_data)
+{
+ gtk_widget_show (prefswindow);
+}
+
+void on_show_adjustments1_activate (GtkMenuItem * menuitem, cam * cam)
+{
+
+ if (GTK_WIDGET_VISIBLE (glade_xml_get_widget (cam->xml, "table6"))) {
+ gtk_widget_hide (glade_xml_get_widget (cam->xml, "table6"));
+ gtk_window_resize (GTK_WINDOW
+ (glade_xml_get_widget
+ (cam->xml, "window2")), 320, 240);
+ cam->show_adjustments = FALSE;
+
+ } else {
+ gtk_widget_show (glade_xml_get_widget (cam->xml, "table6"));
+ cam->show_adjustments = TRUE;
+ }
+ gconf_client_set_bool (cam->gc, KEY22, cam->show_adjustments, NULL);
+}
+
+void on_change_size_activate (GtkWidget * widget, cam * cam)
+{
+ gchar *name, *title;
+
+ (G_CONST_RETURN) name = gtk_widget_get_name (widget);
+
+ if (strcmp (name, "small1") == 0) {
+ cam->x = cam->vid_cap.minwidth;
+ cam->y = cam->vid_cap.minheight;
+ if (cam->debug) {
+ printf ("\nsmall\n");
+ }
+ } else if (strcmp (name, "medium1") == 0) {
+ cam->x = cam->vid_cap.maxwidth / 2;
+ cam->y = cam->vid_cap.maxheight / 2;
+ if (cam->debug) {
+ printf ("\nmed\n");
+ }
+ } else {
+ cam->x = cam->vid_cap.maxwidth;
+ cam->y = cam->vid_cap.maxheight;
+ if (cam->debug) {
+ printf ("\nlarge\n");
+ }
+ }
+
+ cam->pixmap = gdk_pixmap_new (NULL, cam->x, cam->y, cam->desk_depth);
+ gtk_widget_set_size_request (glade_xml_get_widget (cam->xml, "da"),
+ cam->x, cam->y);
+
+ /*
+ * if(cam->read == FALSE) {
+ * * cam->pic = mmap(0, cam->vid_buf.size, PROT_READ | PROT_WRITE, MAP_SHARED, cam->dev, 0);
+ * *
+ * * if((unsigned char *) -1 == (unsigned char *) cam->pic) {
+ * * if(cam->debug == TRUE) {
+ * * fprintf(stderr, "Unable to capture image (mmap).\n");
+ * * }
+ * * error_dialog(_("Unable to capture image."));
+ * * exit(-1);
+ * * }
+ * * }else{
+ * * cam->pic_buf = malloc(cam->x * cam->y * cam->depth);
+ * * read(cam->dev,cam->pic,(cam->x * cam->y * 3));
+ * * }
+ */
+
+ cam->vid_win.x = 0;
+ cam->vid_win.y = 0;
+ cam->vid_win.width = cam->x;
+ cam->vid_win.height = cam->y;
+ cam->vid_win.chromakey = 0;
+ cam->vid_win.flags = 0;
+
+ set_win_info (cam);
+ // get_win_info(cam);
+ cam->vid_map.height = cam->y;
+ cam->vid_map.width = cam->x;
+ /*
+ * cam->vid_win.height = cam->y;
+ * * cam->vid_win.width = cam->x;
+ * * get_win_info(cam);
+ */
+ cam->vid_map.format = cam->vid_pic.palette;
+ // get_win_info(cam);
+ /*
+ * if(cam->read == FALSE) {
+ * * for(frame = 0; frame < cam->vid_buf.frames; frame++) {
+ * * cam->vid_map.frame = frame;
+ * * if(ioctl(cam->dev, VIDIOCMCAPTURE, &cam->vid_map) < 0) {
+ * * if(cam->debug == TRUE) {
+ * * fprintf(stderr, "Unable to capture image (VIDIOCMCAPTURE) during resize.\n");
+ * * }
+ * * //error_dialog(_("Unable to capture image."));
+ * * //exit(-1);
+ * * }
+ * * }
+ * * }
+ */
+ get_win_info (cam);
+ frame = 0;
+ gtk_window_resize (GTK_WINDOW
+ (glade_xml_get_widget (cam->xml, "window2")), 320,
+ 240);
+
+ title = g_strdup_printf ("Camorama - %s - %dx%d", cam->vid_cap.name,
+ cam->x, cam->y);
+ gtk_window_set_title (GTK_WINDOW
+ (glade_xml_get_widget (cam->xml, "window2")),
+ title);
+ g_free (title);
+
+}
+
+void on_show_effects_activate (GtkMenuItem * menuitem, cam * cam)
+{
+
+ if (GTK_WIDGET_VISIBLE (glade_xml_get_widget (cam->xml, "vbox37"))) {
+ gtk_widget_hide (glade_xml_get_widget (cam->xml, "vbox37"));
+ gtk_window_resize (GTK_WINDOW
+ (glade_xml_get_widget
+ (cam->xml, "window2")), 320, 240);
+ cam->show_adjustments = FALSE;
+
+ } else {
+ gtk_widget_show (glade_xml_get_widget (cam->xml, "vbox37"));
+ cam->show_adjustments = TRUE;
+ }
+ gconf_client_set_bool (cam->gc, KEY22, cam->show_adjustments, NULL);
+}
+
+void on_about1_activate (GtkMenuItem * menuitem, gpointer user_data)
+{
+ GtkWidget *about1 = NULL;
+ const gchar *authors[] = { "Greg Jones <greg@fixedgear.org>",
+ "Jens Knutson <tempest@magusbooks.com>", NULL
+ };
+ const gchar *documenters[] = { NULL };
+ GdkPixbuf *logo =
+ (GdkPixbuf *) create_pixbuf (DATADIR "/pixmaps/camorama.png");
+ char *translators = _("translator_credits");
+
+ if (!strcmp (translators, "translator_credits"))
+ translators = NULL;
+
+ if (about1 != NULL) {
+ printf ("before the old return\n");
+ gdk_window_raise (about1->window);
+ gdk_window_show (about1->window);
+ return;
+ printf ("after the old return\n");
+ }
+
+ about1 = gnome_about_new ("Camorama", VERSION,
+ "Copyright \xc2\xa9 2002 Greg Jones",
+ _
+ ("View, alter and save images from a webcam"),
+ authors, documenters, translators, logo);
+
+ g_signal_connect (G_OBJECT (about1), "destroy",
+ G_CALLBACK (gtk_widget_destroyed), &about1);
+ g_object_add_weak_pointer (G_OBJECT (about1), (void **) &(about1));
+
+ gtk_widget_show (about1);
+}
+
+/*
+ * get image from cam - does all the work ;)
+ */
+gint read_timeout_func (cam * cam)
+{
+ int i, count = 0;
+ GdkGC *gc;
+
+ read (cam->dev, cam->pic, (cam->x * cam->y * 3));
+ frames2++;
+ /*
+ * update_rec.x = 0;
+ * * update_rec.y = 0;
+ * * update_rec.width = cam->x;
+ * * update_rec.height = cam->y;
+ */
+ count++;
+ /*
+ * refer the frame
+ */
+ cam->pic_buf = cam->pic; // + cam->vid_buf.offsets[frame];
+
+ if (cam->vid_pic.palette == VIDEO_PALETTE_YUV420P) {
+ yuv420p_to_rgb (cam->pic_buf, cam->tmp, cam->x, cam->y, cam->depth);
+ cam->pic_buf = cam->tmp;
+ }
+
+ if (func_state.fc == TRUE) {
+ fix_colour (cam->pic_buf, cam->x, cam->y);
+ }
+
+ if (func_state.threshold_channel == TRUE) {
+ threshold_channel (cam->pic_buf, cam->x, cam->y, cam->dither);
+ }
+
+ if (func_state.threshold == TRUE) {
+ threshold (cam->pic_buf, cam->x, cam->y, cam->dither);
+ }
+
+ if (func_state.laplace == TRUE) {
+
+ laplace (cam->pic_buf, cam->depth, cam->x, cam->y);
+ }
+
+ if (func_state.sobel == TRUE) {
+ sobel (cam->pic_buf, cam->x, cam->y);
+ }
+
+ if (func_state.wacky == TRUE) {
+ wacky (cam->pic_buf, cam->depth, cam->x, cam->y);
+ }
+
+ if (func_state.negative == TRUE) {
+ negative (cam->pic_buf, cam->x, cam->y, cam->depth);
+ }
+
+ if (func_state.mirror == TRUE) {
+ mirror (cam->pic_buf, cam->x, cam->y, cam->depth);
+ }
+
+ if (func_state.colour == TRUE) {
+ bw (cam->pic_buf, cam->x, cam->y);
+ }
+
+ if (func_state.smooth == TRUE) {
+ smooth (cam->pic_buf, cam->depth, cam->x, cam->y);
+ }
+
+ gc = gdk_gc_new (cam->pixmap);
+ gdk_draw_rgb_image (cam->pixmap,
+ gc, 0, 0,
+ cam->vid_win.width, cam->vid_win.height,
+ GDK_RGB_DITHER_NORMAL, cam->pic_buf,
+ cam->vid_win.width * cam->depth);
+
+ gtk_widget_queue_draw_area (glade_xml_get_widget (cam->xml, "da"), 0,
+ 0, cam->x, cam->y);
+ return 1;
+
+}
+
+gint timeout_func (cam * cam)
+{
+ int i, count = 0;
+ GdkGC *gc;
+
+ i = -1;
+ while (i < 0) {
+ i = ioctl (cam->dev, VIDIOCSYNC, &frame);
+
+ if (i < 0 && errno == EINTR) {
+ if (cam->debug == TRUE) {
+ printf ("i = %d\n", i);
+ }
+ continue;
+ }
+ if (i < 0) {
+ if (cam->debug == TRUE) {
+ fprintf (stderr, "Unable to capture image (VIDIOCSYNC)\n");
+ }
+ error_dialog (_("Unable to capture image."));
+ exit (-1);
+ }
+ break;
+ }
+ count++;
+ /*
+ * refer the frame
+ */
+ cam->pic_buf = cam->pic + cam->vid_buf.offsets[frame];
+ if (cam->vid_pic.palette == VIDEO_PALETTE_YUV420P) {
+ yuv420p_to_rgb (cam->pic_buf, cam->tmp, cam->x, cam->y, cam->depth);
+ cam->pic_buf = cam->tmp;
+ }
+ if (func_state.fc == TRUE) {
+ fix_colour (cam->pic_buf, cam->x, cam->y);
+ }
+
+ if (func_state.threshold_channel == TRUE) {
+ threshold_channel (cam->pic_buf, cam->x, cam->y, cam->dither);
+ }
+
+ if (func_state.threshold == TRUE) {
+ threshold (cam->pic_buf, cam->x, cam->y, cam->dither);
+ }
+
+ if (func_state.laplace == TRUE) {
+
+ laplace (cam->pic_buf, cam->depth, cam->x, cam->y);
+ }
+
+ if (func_state.sobel == TRUE) {
+ sobel (cam->pic_buf, cam->x, cam->y);
+ }
+
+ if (func_state.wacky == TRUE) {
+ wacky (cam->pic_buf, cam->depth, cam->x, cam->y);
+ }
+
+ if (func_state.negative == TRUE) {
+ negative (cam->pic_buf, cam->x, cam->y, cam->depth);
+ }
+
+ if (func_state.mirror == TRUE) {
+ mirror (cam->pic_buf, cam->x, cam->y, cam->depth);
+ }
+
+ if (func_state.colour == TRUE) {
+ bw (cam->pic_buf, cam->x, cam->y);
+ }
+
+ if (func_state.smooth == TRUE) {
+ smooth (cam->pic_buf, cam->depth, cam->x, cam->y);
+ }
+
+ gc = gdk_gc_new (cam->pixmap);
+
+ gdk_draw_rgb_image (cam->pixmap,
+ gc, 0, 0,
+ cam->vid_win.width, cam->vid_win.height,
+ GDK_RGB_DITHER_NORMAL, cam->pic_buf,
+ cam->vid_win.width * cam->depth);
+
+ gtk_widget_queue_draw_area (glade_xml_get_widget (cam->xml, "da"), 0,
+ 0, cam->x, cam->y);
+
+ cam->vid_map.frame = frame;
+ if (ioctl (cam->dev, VIDIOCMCAPTURE, &cam->vid_map) < 0) {
+ if (cam->debug == TRUE) {
+ fprintf (stderr, "Unable to capture image (VIDIOCMCAPTURE)\n");
+ }
+ error_dialog (_("Unable to capture image."));
+ exit (-1);
+ }
+
+ /*
+ * next frame
+ */
+ frame++;
+
+ /*
+ * reset to the 1st frame
+ */
+ if (frame >= cam->vid_buf.frames) {
+ frame = 0;
+ }
+
+ frames2++;
+ g_object_unref ((gpointer) gc);
+ return 1;
+}
+
+gint fps (GtkWidget * sb)
+{
+ gchar *stat;
+
+ seconds++;
+ stat = g_strdup_printf ("%.2f fps - current %.2f fps - average",
+ (float) frames / (float) (2),
+ (float) frames2 / (float) (seconds * 2));
+ frames = 0;
+ gnome_appbar_push (GNOME_APPBAR (sb), stat);
+ g_free (stat);
+ return 1;
+}
+
+void on_status_show (GtkWidget * sb, cam * cam)
+{
+ cam->status = sb;
+}
+
+void init_cam (GtkWidget * capture, cam * cam)
+{
+ cam->pic =
+ mmap (0, cam->vid_buf.size, PROT_READ | PROT_WRITE,
+ MAP_SHARED, cam->dev, 0);
+
+ if ((unsigned char *) -1 == (unsigned char *) cam->pic) {
+ if (cam->debug == TRUE) {
+ fprintf (stderr, "Unable to capture image (mmap).\n");
+ }
+ error_dialog (_("Unable to capture image."));
+ exit (-1);
+ }
+ cam->vid_map.height = cam->y;
+ cam->vid_map.width = cam->x;
+ cam->vid_map.format = cam->vid_pic.palette;
+ for (frame = 0; frame < cam->vid_buf.frames; frame++) {
+ cam->vid_map.frame = frame;
+ if (ioctl (cam->dev, VIDIOCMCAPTURE, &cam->vid_map) < 0) {
+ if (cam->debug == TRUE) {
+ fprintf (stderr,
+ "Unable to capture image (VIDIOCMCAPTURE).\n");
+ }
+ error_dialog (_("Unable to capture image."));
+ exit (-1);
+ }
+ }
+ frame = 0;
+}
+
+void capture_func (GtkWidget * widget, cam * cam)
+{
+ if (cam->debug == TRUE) {
+ printf
+ ("capture_func\nx = %d, y = %d, depth = %d, realloc size = %d\n",
+ cam->x, cam->y, cam->depth, (cam->x * cam->y * cam->depth));
+ }
+
+ memcpy (cam->tmp, cam->pic_buf, cam->x * cam->y * cam->depth);
+
+ if (cam->rcap == TRUE) {
+ remote_save (cam);
+ }
+ if (cam->cap == TRUE) {
+ local_save (cam);
+ }
+
+}
+
+gint timeout_capture_func (cam * cam)
+{
+ /* GdkRectangle rect;
+ rect->x = 0; rect->y = 0;
+ rect->width = cam->x; rect->height = cam->y;*/
+
+ /* need to return true, or the timeout will be destroyed - don't forget! :) */
+ if (cam->hidden == TRUE) {
+ /* call timeout_func to get a new picture. stupid, but it works.
+ * also need to add this to capture_func
+ * maybe add a "window_state_event" handler to do the same when window is iconified */
+
+
+ pt2Function (cam);
+ pt2Function (cam);
+ pt2Function (cam);
+ pt2Function (cam);
+
+ }
+ memcpy (cam->tmp, cam->pic_buf, cam->x * cam->y * cam->depth);
+
+ if (cam->cap == TRUE) {
+ local_save (cam);
+ }
+ if (cam->rcap == TRUE) {
+ remote_save (cam);
+ }
+ return 1;
+}
+
+gboolean
+on_drawingarea1_expose_event (GtkWidget * widget, GdkEventExpose * event,
+ cam * cam)
+{
+ cam->window = widget->window;
+ gdk_draw_drawable (widget->window,
+ widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
+ cam->pixmap,
+ event->area.x, event->area.y, event->area.x,
+ event->area.y, event->area.width, event->area.height);
+
+ frames++;
+ return FALSE;
+}
+
+void fix_colour_func (GtkToggleButton * tb, char *data)
+{
+ func_state.fc = gtk_toggle_button_get_active (tb);
+}
+
+void edge_func1 (GtkToggleButton * tb, gpointer data)
+{
+ func_state.wacky = gtk_toggle_button_get_active (tb);
+}
+
+void sobel_func (GtkToggleButton * tb, gpointer data)
+{
+ func_state.sobel = gtk_toggle_button_get_active (tb);
+}
+
+void threshold_func1 (GtkToggleButton * tb, gpointer data)
+{
+ func_state.threshold = gtk_toggle_button_get_active (tb);
+}
+
+void threshold_ch_func (GtkToggleButton * tb, gpointer data)
+{
+ func_state.threshold_channel = gtk_toggle_button_get_active (tb);
+}
+
+void edge_func3 (GtkToggleButton * tb, gpointer data)
+{
+ func_state.laplace = gtk_toggle_button_get_active (tb);
+}
+
+void negative_func (GtkToggleButton * tb, gpointer data)
+{
+ func_state.negative = gtk_toggle_button_get_active (tb);
+}
+
+void mirror_func (GtkToggleButton * tb, gpointer data)
+{
+ func_state.mirror = gtk_toggle_button_get_active (tb);
+}
+
+void smooth_func (GtkToggleButton * tb, gpointer data)
+{
+ func_state.smooth = gtk_toggle_button_get_active (tb);
+}
+
+void colour_func (GtkToggleButton * tb, gpointer data)
+{
+ func_state.colour = gtk_toggle_button_get_active (tb);
+}
+
+void on_scale1_drag_data_received (GtkHScale * sc1, cam * cam)
+{
+ cam->dither = (int) gtk_range_get_value ((GtkRange *) sc1);
+}
+
+void contrast_change (GtkHScale * sc1, cam * cam)
+{
+
+ cam->vid_pic.contrast =
+ 256 * (int) gtk_range_get_value ((GtkRange *) sc1);
+ set_pic_info (cam);
+}
+
+void brightness_change (GtkHScale * sc1, cam * cam)
+{
+
+ cam->vid_pic.brightness =
+ 256 * (int) gtk_range_get_value ((GtkRange *) sc1);
+ set_pic_info (cam);
+}
+
+void colour_change (GtkHScale * sc1, cam * cam)
+{
+
+ cam->vid_pic.colour = 256 * (int) gtk_range_get_value ((GtkRange *) sc1);
+ set_pic_info (cam);
+}
+
+void hue_change (GtkHScale * sc1, cam * cam)
+{
+
+ cam->vid_pic.hue = 256 * (int) gtk_range_get_value ((GtkRange *) sc1);
+ set_pic_info (cam);
+}
+
+void wb_change (GtkHScale * sc1, cam * cam)
+{
+
+ cam->vid_pic.whiteness =
+ 256 * (int) gtk_range_get_value ((GtkRange *) sc1);
+ set_pic_info (cam);
+}
+
+void help_cb (GtkWidget * widget, gpointer data)
+{
+ GError *error = NULL;
+
+ if (error != NULL) {
+ /*
+ * FIXME: This is bad :)
+ */
+ g_warning ("%s\n", error->message);
+ g_error_free (error);
+ }
+}
+
+void update_tooltip (cam * cam)
+{
+ gchar *tooltip_text;
+
+ if (cam->debug == TRUE) {
+ printf ("update_tooltip called\n");
+ }
+ if (cam->acap == TRUE) {
+ tooltip_text =
+ g_strdup_printf
+ ("Local Capture: %d\nRemote Capture: %d\nCapture Interval: %d",
+ cam->cap, cam->rcap, cam->timeout_interval / 60000);
+ if (cam->debug == TRUE) {
+ printf ("tip - acap on\n");
+ }
+ } else {
+ if (cam->debug == TRUE) {
+ printf ("tip - acap off\n");
+ }
+ tooltip_text = g_strdup_printf ("Automatic Capture Disabled");
+ }
+ gtk_tooltips_set_tip ((GtkTooltips *) cam->tooltips,
+ (GtkWidget *) cam->tray_icon, tooltip_text,
+ "private");
+ g_free (tooltip_text);
+}
diff --git a/src/callbacks.h b/src/callbacks.h
new file mode 100644
index 0000000..04ede00
--- /dev/null
+++ b/src/callbacks.h
@@ -0,0 +1,77 @@
+#include <gtk/gtk.h>
+#include "fileio.h"
+#include <gconf/gconf-client.h>
+
+typedef struct image_state {
+ gboolean wacky;
+ gboolean threshold;
+ gboolean threshold_channel;
+ gboolean sobel;
+ gboolean laplace;
+ gboolean negative;
+ gboolean mirror;
+ gboolean colour;
+ gboolean smooth;
+ gboolean fc;
+} state;
+
+void on_change_size_activate (GtkWidget * widget, cam * cam);
+void on_quit1_activate (GtkMenuItem * menuitem, gpointer user_data);
+void gconf_notify_func (GConfClient * client, guint cnxn_id,
+ GConfEntry * entry, char *);
+void gconf_notify_func_bool (GConfClient * client, guint cnxn_id,
+ GConfEntry * entry, gboolean val);
+void gconf_notify_func_int (GConfClient * client, guint cnxn_id,
+ GConfEntry * entry, int val);
+int delete_event (GtkWidget *, gpointer data);
+void cap_func (GtkWidget *, cam *);
+void rcap_func (GtkWidget *, cam *);
+void acap_func (GtkWidget *, cam *);
+void set_sensitive (cam *);
+void tt_enable_func (GtkWidget *, cam *);
+void interval_change (GtkWidget *, cam *);
+void ts_func (GtkWidget *, cam *);
+void customstring_func (GtkWidget *, cam *);
+void drawdate_func (GtkWidget *, cam *);
+void append_func (GtkWidget *, cam *);
+void rappend_func (GtkWidget *, cam *);
+void jpg_func (GtkWidget *, cam *);
+void png_func (GtkWidget *, cam *);
+void ppm_func (GtkWidget *, cam *);
+void rts_func (GtkWidget *, cam *);
+void rjpg_func (GtkWidget *, cam *);
+void rpng_func (GtkWidget *, cam *);
+gint (*pt2Function) (cam *);
+void rppm_func (GtkWidget *, cam *);
+void on_preferences1_activate (GtkMenuItem * menuitem, gpointer user_data);
+void on_about1_activate (GtkMenuItem * menuitem, gpointer user_data);
+void on_show_adjustments1_activate (GtkMenuItem * menuitem, cam *);
+void on_show_effects_activate (GtkMenuItem * menuitem, cam *);
+void prefs_func (GtkWidget *, cam *);
+gint io_func (cam *, gint, GdkInputCondition);
+void capture_func2 (GtkWidget *, cam *);
+void capture_func (GtkWidget *, cam *);
+void init_cam (GtkWidget * capture, cam * cam);
+gint timeout_capture_func (cam *);
+gint fps (GtkWidget *);
+gint timeout_func (cam *);
+gint read_timeout_func (cam *);
+void edge_func1 (GtkToggleButton *, gpointer);
+void sobel_func (GtkToggleButton *, gpointer);
+void fix_colour_func (GtkToggleButton *, char *);
+void threshold_func1 (GtkToggleButton *, gpointer);
+void threshold_ch_func (GtkToggleButton *, gpointer);
+void edge_func3 (GtkToggleButton *, gpointer);
+void mirror_func (GtkToggleButton *, gpointer);
+void colour_func (GtkToggleButton *, gpointer);
+void smooth_func (GtkToggleButton *, gpointer);
+void negative_func (GtkToggleButton *, gpointer);
+void on_scale1_drag_data_received (GtkHScale *, cam *);
+void on_status_show (GtkWidget *, cam *);
+void contrast_change (GtkHScale *, cam *);
+void brightness_change (GtkHScale *, cam *);
+void colour_change (GtkHScale *, cam *);
+void hue_change (GtkHScale *, cam *);
+void wb_change (GtkHScale *, cam *);
+gboolean on_drawingarea1_expose_event (GtkWidget *, GdkEventExpose *, cam *);
+void update_tooltip (cam * cam);
diff --git a/src/eggtrayicon.c b/src/eggtrayicon.c
new file mode 100644
index 0000000..6c30930
--- /dev/null
+++ b/src/eggtrayicon.c
@@ -0,0 +1,480 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* eggtrayicon.c
+ * Copyright (C) 2002 Anders Carlsson <andersca@gnu.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <config.h>
+#include <string.h>
+#include <libintl.h>
+
+#include "eggtrayicon.h"
+
+#include <gdk/gdkx.h>
+#include <X11/Xatom.h>
+
+#ifndef EGG_COMPILATION
+#ifndef _
+#define _(x) dgettext (GETTEXT_PACKAGE, x)
+#define N_(x) x
+#endif
+#else
+#define _(x) x
+#define N_(x) x
+#endif
+
+#define SYSTEM_TRAY_REQUEST_DOCK 0
+#define SYSTEM_TRAY_BEGIN_MESSAGE 1
+#define SYSTEM_TRAY_CANCEL_MESSAGE 2
+
+#define SYSTEM_TRAY_ORIENTATION_HORZ 0
+#define SYSTEM_TRAY_ORIENTATION_VERT 1
+
+enum {
+ PROP_0,
+ PROP_ORIENTATION
+};
+
+static GtkPlugClass *parent_class = NULL;
+
+static void egg_tray_icon_init (EggTrayIcon *icon);
+static void egg_tray_icon_class_init (EggTrayIconClass *klass);
+
+static void egg_tray_icon_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec);
+
+static void egg_tray_icon_realize (GtkWidget *widget);
+static void egg_tray_icon_unrealize (GtkWidget *widget);
+
+static void egg_tray_icon_update_manager_window (EggTrayIcon *icon);
+
+GType
+egg_tray_icon_get_type (void)
+{
+ static GType our_type = 0;
+
+ if (our_type == 0)
+ {
+ static const GTypeInfo our_info =
+ {
+ sizeof (EggTrayIconClass),
+ (GBaseInitFunc) NULL,
+ (GBaseFinalizeFunc) NULL,
+ (GClassInitFunc) egg_tray_icon_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (EggTrayIcon),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) egg_tray_icon_init
+ };
+
+ our_type = g_type_register_static (GTK_TYPE_PLUG, "EggTrayIcon", &our_info, 0);
+ }
+
+ return our_type;
+}
+
+static void
+egg_tray_icon_init (EggTrayIcon *icon)
+{
+ icon->stamp = 1;
+ icon->orientation = GTK_ORIENTATION_HORIZONTAL;
+
+ gtk_widget_add_events (GTK_WIDGET (icon), GDK_PROPERTY_CHANGE_MASK);
+}
+
+static void
+egg_tray_icon_class_init (EggTrayIconClass *klass)
+{
+ GObjectClass *gobject_class = (GObjectClass *)klass;
+ GtkWidgetClass *widget_class = (GtkWidgetClass *)klass;
+
+ parent_class = g_type_class_peek_parent (klass);
+
+ gobject_class->get_property = egg_tray_icon_get_property;
+
+ widget_class->realize = egg_tray_icon_realize;
+ widget_class->unrealize = egg_tray_icon_unrealize;
+
+ g_object_class_install_property (gobject_class,
+ PROP_ORIENTATION,
+ g_param_spec_enum ("orientation",
+ _("Orientation"),
+ _("The orientation of the tray."),
+ GTK_TYPE_ORIENTATION,
+ GTK_ORIENTATION_HORIZONTAL,
+ G_PARAM_READABLE));
+}
+
+static void
+egg_tray_icon_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EggTrayIcon *icon = EGG_TRAY_ICON (object);
+
+ switch (prop_id)
+ {
+ case PROP_ORIENTATION:
+ g_value_set_enum (value, icon->orientation);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+egg_tray_icon_get_orientation_property (EggTrayIcon *icon)
+{
+ Display *xdisplay;
+ Atom type;
+ int format;
+ union {
+ gulong *prop;
+ guchar *prop_ch;
+ } prop = { NULL };
+ gulong nitems;
+ gulong bytes_after;
+ int error, result;
+
+ g_assert (icon->manager_window != None);
+
+ xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
+
+ gdk_error_trap_push ();
+ type = None;
+ result = XGetWindowProperty (xdisplay,
+ icon->manager_window,
+ icon->orientation_atom,
+ 0, G_MAXLONG, FALSE,
+ XA_CARDINAL,
+ &type, &format, &nitems,
+ &bytes_after, &(prop.prop_ch));
+ error = gdk_error_trap_pop ();
+
+ if (error || result != Success)
+ return;
+
+ if (type == XA_CARDINAL)
+ {
+ GtkOrientation orientation;
+
+ orientation = (prop.prop [0] == SYSTEM_TRAY_ORIENTATION_HORZ) ?
+ GTK_ORIENTATION_HORIZONTAL :
+ GTK_ORIENTATION_VERTICAL;
+
+ if (icon->orientation != orientation)
+ {
+ icon->orientation = orientation;
+
+ g_object_notify (G_OBJECT (icon), "orientation");
+ }
+ }
+
+ if (prop.prop)
+ XFree (prop.prop);
+}
+
+static GdkFilterReturn
+egg_tray_icon_manager_filter (GdkXEvent *xevent, GdkEvent *event, gpointer user_data)
+{
+ EggTrayIcon *icon = user_data;
+ XEvent *xev = (XEvent *)xevent;
+
+ if (xev->xany.type == ClientMessage &&
+ xev->xclient.message_type == icon->manager_atom &&
+ xev->xclient.data.l[1] == icon->selection_atom)
+ {
+ egg_tray_icon_update_manager_window (icon);
+ }
+ else if (xev->xany.window == icon->manager_window)
+ {
+ if (xev->xany.type == PropertyNotify &&
+ xev->xproperty.atom == icon->orientation_atom)
+ {
+ egg_tray_icon_get_orientation_property (icon);
+ }
+ if (xev->xany.type == DestroyNotify)
+ {
+ egg_tray_icon_update_manager_window (icon);
+ }
+ }
+
+ return GDK_FILTER_CONTINUE;
+}
+
+static void
+egg_tray_icon_unrealize (GtkWidget *widget)
+{
+ EggTrayIcon *icon = EGG_TRAY_ICON (widget);
+ GdkWindow *root_window;
+
+ if (icon->manager_window != None)
+ {
+ GdkWindow *gdkwin;
+
+ gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (widget),
+ icon->manager_window);
+
+ gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon);
+ }
+
+ root_window = gdk_screen_get_root_window (gtk_widget_get_screen (widget));
+
+ gdk_window_remove_filter (root_window, egg_tray_icon_manager_filter, icon);
+
+ if (GTK_WIDGET_CLASS (parent_class)->unrealize)
+ (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
+}
+
+static void
+egg_tray_icon_send_manager_message (EggTrayIcon *icon,
+ long message,
+ Window window,
+ long data1,
+ long data2,
+ long data3)
+{
+ XClientMessageEvent ev;
+ Display *display;
+
+ ev.type = ClientMessage;
+ ev.window = window;
+ ev.message_type = icon->system_tray_opcode_atom;
+ ev.format = 32;
+ ev.data.l[0] = gdk_x11_get_server_time (GTK_WIDGET (icon)->window);
+ ev.data.l[1] = message;
+ ev.data.l[2] = data1;
+ ev.data.l[3] = data2;
+ ev.data.l[4] = data3;
+
+ display = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
+
+ gdk_error_trap_push ();
+ XSendEvent (display,
+ icon->manager_window, False, NoEventMask, (XEvent *)&ev);
+ XSync (display, False);
+ gdk_error_trap_pop ();
+}
+
+static void
+egg_tray_icon_send_dock_request (EggTrayIcon *icon)
+{
+ egg_tray_icon_send_manager_message (icon,
+ SYSTEM_TRAY_REQUEST_DOCK,
+ icon->manager_window,
+ gtk_plug_get_id (GTK_PLUG (icon)),
+ 0, 0);
+}
+
+static void
+egg_tray_icon_update_manager_window (EggTrayIcon *icon)
+{
+ Display *xdisplay;
+
+ xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
+
+ if (icon->manager_window != None)
+ {
+ GdkWindow *gdkwin;
+
+ gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)),
+ icon->manager_window);
+
+ gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon);
+ }
+
+ XGrabServer (xdisplay);
+
+ icon->manager_window = XGetSelectionOwner (xdisplay,
+ icon->selection_atom);
+
+ if (icon->manager_window != None)
+ XSelectInput (xdisplay,
+ icon->manager_window, StructureNotifyMask|PropertyChangeMask);
+
+ XUngrabServer (xdisplay);
+ XFlush (xdisplay);
+
+ if (icon->manager_window != None)
+ {
+ GdkWindow *gdkwin;
+
+ gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)),
+ icon->manager_window);
+
+ gdk_window_add_filter (gdkwin, egg_tray_icon_manager_filter, icon);
+
+ /* Send a request that we'd like to dock */
+ egg_tray_icon_send_dock_request (icon);
+
+ egg_tray_icon_get_orientation_property (icon);
+ }
+}
+
+static void
+egg_tray_icon_realize (GtkWidget *widget)
+{
+ EggTrayIcon *icon = EGG_TRAY_ICON (widget);
+ GdkScreen *screen;
+ GdkDisplay *display;
+ Display *xdisplay;
+ char buffer[256];
+ GdkWindow *root_window;
+
+ if (GTK_WIDGET_CLASS (parent_class)->realize)
+ GTK_WIDGET_CLASS (parent_class)->realize (widget);
+
+ screen = gtk_widget_get_screen (widget);
+ display = gdk_screen_get_display (screen);
+ xdisplay = gdk_x11_display_get_xdisplay (display);
+
+ /* Now see if there's a manager window around */
+ g_snprintf (buffer, sizeof (buffer),
+ "_NET_SYSTEM_TRAY_S%d",
+ gdk_screen_get_number (screen));
+
+ icon->selection_atom = XInternAtom (xdisplay, buffer, False);
+
+ icon->manager_atom = XInternAtom (xdisplay, "MANAGER", False);
+
+ icon->system_tray_opcode_atom = XInternAtom (xdisplay,
+ "_NET_SYSTEM_TRAY_OPCODE",
+ False);
+
+ icon->orientation_atom = XInternAtom (xdisplay,
+ "_NET_SYSTEM_TRAY_ORIENTATION",
+ False);
+
+ egg_tray_icon_update_manager_window (icon);
+
+ root_window = gdk_screen_get_root_window (screen);
+
+ /* Add a root window filter so that we get changes on MANAGER */
+ gdk_window_add_filter (root_window,
+ egg_tray_icon_manager_filter, icon);
+}
+
+EggTrayIcon *
+egg_tray_icon_new_for_xscreen (Screen *xscreen, const char *name)
+{
+ GdkDisplay *display;
+ GdkScreen *screen;
+
+ display = gdk_x11_lookup_xdisplay (DisplayOfScreen (xscreen));
+ screen = gdk_display_get_screen (display, XScreenNumberOfScreen (xscreen));
+
+ return egg_tray_icon_new_for_screen (screen, name);
+}
+
+EggTrayIcon *
+egg_tray_icon_new_for_screen (GdkScreen *screen, const char *name)
+{
+ g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
+
+ return g_object_new (EGG_TYPE_TRAY_ICON, "screen", screen, "title", name, NULL);
+}
+
+EggTrayIcon*
+egg_tray_icon_new (const gchar *name)
+{
+ return g_object_new (EGG_TYPE_TRAY_ICON, "title", name, NULL);
+}
+
+guint
+egg_tray_icon_send_message (EggTrayIcon *icon,
+ gint timeout,
+ const gchar *message,
+ gint len)
+{
+ guint stamp;
+
+ g_return_val_if_fail (EGG_IS_TRAY_ICON (icon), 0);
+ g_return_val_if_fail (timeout >= 0, 0);
+ g_return_val_if_fail (message != NULL, 0);
+
+ if (icon->manager_window == None)
+ return 0;
+
+ if (len < 0)
+ len = strlen (message);
+
+ stamp = icon->stamp++;
+
+ /* Get ready to send the message */
+ egg_tray_icon_send_manager_message (icon, SYSTEM_TRAY_BEGIN_MESSAGE,
+ (Window)gtk_plug_get_id (GTK_PLUG (icon)),
+ timeout, len, stamp);
+
+ /* Now to send the actual message */
+ gdk_error_trap_push ();
+ while (len > 0)
+ {
+ XClientMessageEvent ev;
+ Display *xdisplay;
+
+ xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
+
+ ev.type = ClientMessage;
+ ev.window = (Window)gtk_plug_get_id (GTK_PLUG (icon));
+ ev.format = 8;
+ ev.message_type = XInternAtom (xdisplay,
+ "_NET_SYSTEM_TRAY_MESSAGE_DATA", False);
+ if (len > 20)
+ {
+ memcpy (&ev.data, message, 20);
+ len -= 20;
+ message += 20;
+ }
+ else
+ {
+ memcpy (&ev.data, message, len);
+ len = 0;
+ }
+
+ XSendEvent (xdisplay,
+ icon->manager_window, False, StructureNotifyMask, (XEvent *)&ev);
+ XSync (xdisplay, False);
+ }
+ gdk_error_trap_pop ();
+
+ return stamp;
+}
+
+void
+egg_tray_icon_cancel_message (EggTrayIcon *icon,
+ guint id)
+{
+ g_return_if_fail (EGG_IS_TRAY_ICON (icon));
+ g_return_if_fail (id > 0);
+
+ egg_tray_icon_send_manager_message (icon, SYSTEM_TRAY_CANCEL_MESSAGE,
+ (Window)gtk_plug_get_id (GTK_PLUG (icon)),
+ id, 0, 0);
+}
+
+GtkOrientation
+egg_tray_icon_get_orientation (EggTrayIcon *icon)
+{
+ g_return_val_if_fail (EGG_IS_TRAY_ICON (icon), GTK_ORIENTATION_HORIZONTAL);
+
+ return icon->orientation;
+}
diff --git a/src/eggtrayicon.h b/src/eggtrayicon.h
new file mode 100644
index 0000000..007f4c1
--- /dev/null
+++ b/src/eggtrayicon.h
@@ -0,0 +1,77 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* eggtrayicon.h
+ * Copyright (C) 2002 Anders Carlsson <andersca@gnu.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __EGG_TRAY_ICON_H__
+#define __EGG_TRAY_ICON_H__
+
+#include <gtk/gtkplug.h>
+#include <gdk/gdkx.h>
+
+G_BEGIN_DECLS
+
+#define EGG_TYPE_TRAY_ICON (egg_tray_icon_get_type ())
+#define EGG_TRAY_ICON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_TRAY_ICON, EggTrayIcon))
+#define EGG_TRAY_ICON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_TRAY_ICON, EggTrayIconClass))
+#define EGG_IS_TRAY_ICON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_TRAY_ICON))
+#define EGG_IS_TRAY_ICON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_TRAY_ICON))
+#define EGG_TRAY_ICON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_TRAY_ICON, EggTrayIconClass))
+
+typedef struct _EggTrayIcon EggTrayIcon;
+typedef struct _EggTrayIconClass EggTrayIconClass;
+
+struct _EggTrayIcon
+{
+ GtkPlug parent_instance;
+
+ guint stamp;
+
+ Atom selection_atom;
+ Atom manager_atom;
+ Atom system_tray_opcode_atom;
+ Atom orientation_atom;
+ Window manager_window;
+
+ GtkOrientation orientation;
+};
+
+struct _EggTrayIconClass
+{
+ GtkPlugClass parent_class;
+};
+
+GType egg_tray_icon_get_type (void);
+
+EggTrayIcon *egg_tray_icon_new_for_screen (GdkScreen *screen,
+ const gchar *name);
+
+EggTrayIcon *egg_tray_icon_new (const gchar *name);
+
+guint egg_tray_icon_send_message (EggTrayIcon *icon,
+ gint timeout,
+ const char *message,
+ gint len);
+void egg_tray_icon_cancel_message (EggTrayIcon *icon,
+ guint id);
+
+GtkOrientation egg_tray_icon_get_orientation (EggTrayIcon *icon);
+
+G_END_DECLS
+
+#endif /* __EGG_TRAY_ICON_H__ */
diff --git a/src/fileio.c b/src/fileio.c
new file mode 100644
index 0000000..7e8a6b1
--- /dev/null
+++ b/src/fileio.c
@@ -0,0 +1,439 @@
+#include"fileio.h"
+#include<time.h>
+#include<errno.h>
+#include "support.h"
+
+#include <gdk-pixbuf/gdk-pixbuf.h>
+#include<stdio.h>
+# define CHAR_HEIGHT 11
+# define CHAR_WIDTH 6
+# define CHAR_START 4
+# include "font_6x11.h"
+#include <gnome.h>
+
+static int print_error (GnomeVFSResult result, const char *uri_string);
+
+/* add timestamp/text to image - "borrowed" from gspy */
+int
+add_rgb_text (char *image, int width, int height, char *cstring, char *format,
+ gboolean str, gboolean date)
+{
+ time_t t;
+ struct tm *tm;
+ unsigned char line[128], *ptr;
+ int i, x, y, f, len;
+ int total;
+ gchar *image_label;
+
+ if (str == TRUE && date == TRUE) {
+ image_label = g_strdup_printf ("%s - %s", cstring, format);
+
+ } else if (str == TRUE && date == FALSE) {
+ image_label = g_strdup_printf ("%s", cstring);
+ } else if (str == FALSE && date == TRUE) {
+ image_label = g_strdup_printf ("%s", format);
+ } else if (str == FALSE && date == FALSE) {
+ return 0;
+ }
+
+ time (&t);
+ tm = localtime (&t);
+ len = strftime (line, 127, image_label, tm);
+
+ for (y = 0; y < CHAR_HEIGHT; y++) {
+ /* locate text in lower left corner of image */
+ ptr = image + 3 * width * (height - CHAR_HEIGHT - 2 + y) + 12;
+
+ /* loop for each character in the string */
+ for (x = 0; x < len; x++) {
+ /* locate the character in the fontdata array */
+ f = fontdata[line[x] * CHAR_HEIGHT + y];
+
+ /* loop for each column of font data */
+ for (i = CHAR_WIDTH - 1; i >= 0; i--) {
+ /* write a black background under text
+ * comment out the following block to get white letters on picture background */
+ /* ptr[0] = 0;
+ * ptr[1] = 0;
+ * ptr[2] = 0; */
+ if (f & (CHAR_START << i)) {
+
+ /* white text */
+
+ total = ptr[0] + ptr[1] + ptr[2];
+ if (total / 3 < 128) {
+ ptr[0] = 255;
+ ptr[1] = 255;
+ ptr[2] = 255;
+ } else {
+ ptr[0] = 0;
+ ptr[1] = 0;
+ ptr[2] = 0;
+ }
+ }
+ ptr += 3;
+ }
+ }
+ }
+ return 1;
+}
+
+void remote_save (cam * cam)
+{
+ GThread *remote_thread;
+ GnomeVFSHandle **write_handle;
+ char *output_uri_string, *input_uri_string;
+ GnomeVFSFileSize bytes_written;
+ GnomeVFSURI *uri_1;
+ unsigned char *tmp;
+ GnomeVFSResult result = 0;
+ gboolean test;
+ char *filename, *error_message;
+ FILE *fp;
+ int bytes = 0, fc;
+ time_t t;
+ gchar *timenow, *ext;
+ struct tm *tm;
+ gboolean pbs;
+ GdkPixbuf *pb;
+ GError *error;
+
+ switch (cam->rsavetype) {
+ case JPEG:
+ ext = g_strdup ((gchar *) "jpeg");
+ break;
+ case PNG:
+ ext = g_strdup ((gchar *) "png");
+ break;
+ default:
+ ext = g_strdup ((gchar *) "jpeg");
+ }
+ //cam->tmp = NULL;
+
+ if (cam->rtimestamp == TRUE) {
+ add_rgb_text (cam->tmp, cam->x, cam->y, cam->ts_string,
+ cam->date_format, cam->usestring, cam->usedate);
+ }
+
+ if (chdir ("/tmp") != 0) {
+ error_dialog (_("Could save temporary image file in /tmp."));
+ g_free (ext);
+ //g_thread_exit (NULL);
+ }
+
+ time (&t);
+ tm = localtime (&t);
+ strftime (timenow, sizeof (timenow) - 1, "%s", tm);
+
+ filename = g_strdup_printf ("camorama.%s", ext);
+ //g_free(ext);
+ pb = gdk_pixbuf_new_from_data (cam->tmp, GDK_COLORSPACE_RGB, FALSE, 8,
+ cam->x, cam->y,
+ cam->x * cam->vid_pic.depth / 8, NULL,
+ NULL);
+
+ if (pb == NULL) {
+ error_message =
+ g_strdup_printf (_("Unable to create image '%s'."), filename);
+ error_dialog (error_message);
+ g_free (error_message);
+ //g_thread_exit (NULL);
+ }
+
+ pbs = gdk_pixbuf_save (pb, filename, ext, NULL, NULL); //&error);//, NULL);
+ if (pbs == FALSE) {
+ error_message =
+ g_strdup_printf (_("Could not save image '%s/%s'."),
+ cam->pixdir, filename);
+ error_dialog (error_message);
+ g_free (filename);
+ //g_free (error_message);
+ //return -1;
+ }
+
+ /*if (cam->debug == TRUE)
+ * {
+ * fprintf (stderr, "bytes to file %s: %d\n", filename, fc);
+ * } */
+
+ g_free (filename);
+ /* from here :) */
+ /* open tmp file and read it */
+ /*input_uri_string = g_strdup_printf ("camorama.%s", ext);
+ *
+ * if (!(fp = fopen (input_uri_string, "rb")))
+ * {
+ * error_message =
+ * g_strdup_printf (_
+ * ("Unable to open temporary image file '%s'."),
+ * filename);
+ * error_dialog (error_message);
+ * g_free (input_uri_string);
+ * g_free (error_message);
+ * exit (0);
+ * }
+ *
+ * tmp = malloc (sizeof (char) * cam->x * cam->y * cam->depth * 2);
+ * while (!feof (fp))
+ * {
+ * bytes += fread (tmp, 1, cam->x * cam->y * cam->depth, fp);
+ * }
+ * fclose (fp);
+ *
+ * time (&t);
+ * tm = localtime (&t);
+ * strftime (timenow, sizeof (timenow) - 1, "%s", tm);
+ * if (cam->rtimefn == TRUE)
+ * {
+ * output_uri_string = g_strdup_printf ("ftp://%s/%s/%s-%s.%s",
+ * cam->rhost, cam->rpixdir,
+ * cam->rcapturefile,
+ * timenow, ext);
+ * }
+ * else
+ * {
+ * output_uri_string =
+ * g_strdup_printf ("ftp://%s/%s/%s.%s", cam->rhost,
+ * cam->rpixdir, cam->rcapturefile,
+ * ext);
+ * }
+ * uri_1 = gnome_vfs_uri_new (output_uri_string);
+ *
+ * test = gnome_vfs_uri_exists (uri_1);
+ *
+ * gnome_vfs_uri_set_user_name (uri_1, cam->rlogin);
+ * gnome_vfs_uri_set_password (uri_1, cam->rpw);
+ */
+ /* start here? */
+ /*result = gnome_vfs_open_uri((GnomeVFSHandle **) & write_handle, uri_1, GNOME_VFS_OPEN_WRITE);
+ * if(result != GNOME_VFS_OK) {
+ * error_message = g_strdup_printf(_("An error occured opening %s."), output_uri_string);
+ * error_dialog(error_message);
+ * g_free(error_message);
+ * g_thread_exit(NULL);
+ * } */
+
+ /* write the data */
+ /*result = gnome_vfs_write((GnomeVFSHandle *) write_handle, tmp, bytes, &bytes_written);
+ * if(result != GNOME_VFS_OK) {
+ * error_message = g_strdup_printf(_("An error occured writing to %s."), output_uri_string);
+ * error_dialog(error_message);
+ * g_free(error_message);
+ * } */
+
+ remote_thread =
+ g_thread_create ((GThreadFunc) save_thread, cam, FALSE, NULL);
+ g_free (ext);
+ //free (tmp);
+
+}
+
+void save_thread (cam * cam)
+{
+ GnomeVFSHandle **write_handle;
+ char *output_uri_string, *input_uri_string;
+ GnomeVFSFileSize bytes_written;
+ GnomeVFSURI *uri_1;
+ unsigned char *tmp;
+ GnomeVFSResult result = 0;
+ gboolean test;
+ char *filename, *error_message;
+ FILE *fp;
+ int bytes = 0;
+ time_t t;
+ gchar *timenow, *ext;
+ struct tm *tm;
+ gboolean pbs;
+ GdkPixbuf *pb;
+ /*GnomeVFSResult result = 0;
+ * GnomeVFSHandle **write_handle;
+ * char *error_message; */
+
+ switch (cam->rsavetype) {
+ case JPEG:
+ ext = g_strdup ((gchar *) "jpeg");
+ break;
+ case PNG:
+ ext = g_strdup ((gchar *) "png");
+ break;
+ default:
+ ext = g_strdup ((gchar *) "jpeg");
+ }
+ input_uri_string = g_strdup_printf ("camorama.%s", ext);
+
+ if (chdir ("/tmp") != 0) {
+ error_dialog (_("Could save temporary image file in /tmp."));
+ g_free (ext);
+ g_thread_exit (NULL);
+ }
+
+ if (!(fp = fopen (input_uri_string, "rb"))) {
+ error_message =
+ g_strdup_printf (_
+ ("Unable to open temporary image file '%s'.\nCannot upload image."),
+ input_uri_string);
+ error_dialog (error_message);
+ g_free (input_uri_string);
+ g_free (error_message);
+ g_thread_exit (NULL);
+ //exit (0);
+ }
+
+ tmp = malloc (sizeof (char) * cam->x * cam->y * cam->depth * 2);
+ while (!feof (fp)) {
+ bytes += fread (tmp, 1, cam->x * cam->y * cam->depth, fp);
+ }
+ fclose (fp);
+
+ time (&t);
+ tm = localtime (&t);
+ strftime (timenow, sizeof (timenow) - 1, "%s", tm);
+ if (cam->rtimefn == TRUE) {
+ output_uri_string = g_strdup_printf ("ftp://%s/%s/%s-%s.%s",
+ cam->rhost, cam->rpixdir,
+ cam->rcapturefile, timenow, ext);
+ } else {
+ output_uri_string =
+ g_strdup_printf ("ftp://%s/%s/%s.%s", cam->rhost,
+ cam->rpixdir, cam->rcapturefile, ext);
+ }
+ uri_1 = gnome_vfs_uri_new (output_uri_string);
+
+ //test = gnome_vfs_uri_exists (uri_1);
+ gnome_vfs_uri_set_user_name (uri_1, cam->rlogin);
+ gnome_vfs_uri_set_password (uri_1, cam->rpw);
+
+
+ result = gnome_vfs_open_uri ((GnomeVFSHandle **) & write_handle,
+ uri_1, GNOME_VFS_OPEN_WRITE);
+ if (result != GNOME_VFS_OK) {
+ error_message =
+ g_strdup_printf (_("An error occured opening %s."),
+ output_uri_string);
+ error_dialog (error_message);
+ g_free (error_message);
+ g_thread_exit (NULL);
+ }
+
+ /* write the data */
+ result = gnome_vfs_write ((GnomeVFSHandle *) write_handle, tmp, bytes,
+ &bytes_written);
+ if (result != GNOME_VFS_OK) {
+ error_message =
+ g_strdup_printf (_("An error occured writing to %s."),
+ output_uri_string);
+ error_dialog (error_message);
+ g_free (error_message);
+ }
+ gnome_vfs_close ((GnomeVFSHandle *) write_handle);
+ gnome_vfs_shutdown ();
+ free (tmp);
+ g_thread_exit (NULL);
+}
+
+static int print_error (GnomeVFSResult result, const char *uri_string)
+{
+ const char *error_string;
+ /* get the string corresponding to this GnomeVFSResult value */
+ error_string = gnome_vfs_result_to_string (result);
+ printf ("Error %s occured opening location %s\n", error_string,
+ uri_string);
+ return 1;
+}
+
+int local_save (cam * cam)
+{
+ int fc;
+ gchar *filename, *ext;
+ time_t t;
+ struct tm *tm;
+ char timenow[64], *error_message;
+ int len, mkd;
+ gboolean pbs;
+ GdkPixbuf *pb;
+
+ /* todo:
+ * run gdk-pixbuf-query-loaders to get available image types*/
+
+ switch (cam->savetype) {
+ case JPEG:
+ ext = g_strdup ((gchar *) "jpeg");
+ break;
+ case PNG:
+ ext = g_strdup ((gchar *) "png");
+ break;
+ default:
+ ext = g_strdup ((gchar *) "jpeg");
+ }
+ //cam->tmp = NULL;
+ //memcpy (cam->tmp, cam->pic_buf, cam->x * cam->y * cam->depth);
+
+ if (cam->timestamp == TRUE) {
+ add_rgb_text (cam->tmp, cam->x, cam->y, cam->ts_string,
+ cam->date_format, cam->usestring, cam->usedate);
+ }
+
+ time (&t);
+ tm = localtime (&t);
+ len = strftime (timenow, sizeof (timenow) - 1, "%s", tm);
+
+ if (cam->debug == TRUE) {
+ fprintf (stderr, "time = %s\n", timenow);
+ }
+
+ if (cam->timefn == TRUE) {
+ filename =
+ g_strdup_printf ("%s-%s.%s", cam->capturefile, timenow, ext);
+ } else {
+ filename = g_strdup_printf ("%s.%s", cam->capturefile, ext);
+ }
+
+ if (cam->debug == TRUE) {
+ fprintf (stderr, "filename = %s\n", filename);
+ }
+ mkd = mkdir (cam->pixdir, 0777);
+
+ if (cam->debug == TRUE) {
+ perror ("create dir: ");
+ }
+
+ if (mkd != 0 && errno != EEXIST) {
+ error_message =
+ g_strdup_printf (_
+ ("Could not create directory '%s'."),
+ cam->pixdir);
+ error_dialog (error_message);
+ g_free (filename);
+ g_free (error_message);
+ return -1;
+ }
+
+ if (chdir (cam->pixdir) != 0) {
+ error_message =
+ g_strdup_printf (_
+ ("Could not change to directory '%s'."),
+ cam->pixdir);
+ error_dialog (error_message);
+ g_free (filename);
+ g_free (error_message);
+ return -1;
+ }
+
+ pb = gdk_pixbuf_new_from_data (cam->tmp, GDK_COLORSPACE_RGB, FALSE, 8,
+ cam->x, cam->y,
+ (cam->x * cam->vid_pic.depth / 8), NULL,
+ NULL);
+ pbs = gdk_pixbuf_save (pb, filename, ext, NULL, NULL);
+ if (pbs == FALSE) {
+ error_message =
+ g_strdup_printf (_("Could not save image '%s/%s'."),
+ cam->pixdir, filename);
+ error_dialog (error_message);
+ g_free (filename);
+ g_free (error_message);
+ return -1;
+ }
+
+ g_free (filename);
+ return 0;
+}
diff --git a/src/fileio.h b/src/fileio.h
new file mode 100644
index 0000000..96ae35c
--- /dev/null
+++ b/src/fileio.h
@@ -0,0 +1,7 @@
+#include "v4l.h"
+#include <libgnomevfs/gnome-vfs.h>
+
+int add_rgb_text (char *, int, int, char *, char *, gboolean, gboolean);
+void remote_save (cam *);
+void save_thread (cam *);
+int local_save (cam *);
diff --git a/src/filter.c b/src/filter.c
new file mode 100644
index 0000000..778a7ce
--- /dev/null
+++ b/src/filter.c
@@ -0,0 +1,493 @@
+#include "v4l.h"
+
+static inline void move_420_block (int yTL, int yTR, int yBL, int yBR, int u,
+ int v, int rowPixels, unsigned char *rgb,
+ int bits);
+
+/*these two functions are borrowed from the ov511 driver, with the author,
+ *Mark McClelland's kind encoragement*/
+
+/* LIMIT: convert a 16.16 fixed-point value to a byte, with clipping. */
+#define LIMIT(x) ((x)>0xffffff?0xff: ((x)<=0xffff?0:((x)>>16)))
+
+void
+yuv420p_to_rgb (unsigned char *image, unsigned char *temp, int x, int y,
+ int z)
+{
+ const int numpix = x * y;
+ const int bytes = z; /* (z*8) >> 3; */
+ int i, j, y00, y01, y10, y11, u, v;
+ unsigned char *pY = image;
+ unsigned char *pU = pY + numpix;
+ unsigned char *pV = pU + numpix / 4;
+ unsigned char *image2 = temp;
+
+ for (j = 0; j <= y - 2; j += 2) {
+ for (i = 0; i <= x - 2; i += 2) {
+ y00 = *pY;
+ y01 = *(pY + 1);
+ y10 = *(pY + x);
+ y11 = *(pY + x + 1);
+ u = (*pU++) - 128;
+ v = (*pV++) - 128;
+
+ move_420_block (y00, y01, y10, y11, u, v, x, image2, z * 8);
+
+ pY += 2;
+ image2 += 2 * bytes;
+ }
+ pY += x;
+ image2 += x * bytes;
+ }
+}
+static inline void
+move_420_block (int yTL, int yTR, int yBL, int yBR, int u, int v,
+ int rowPixels, unsigned char *rgb, int bits)
+{
+ const int rvScale = 91881;
+ const int guScale = -22553;
+ const int gvScale = -46801;
+ const int buScale = 116129;
+ const int yScale = 65536;
+ int r, g, b;
+
+ g = guScale * u + gvScale * v;
+ if (1) {
+ r = buScale * u;
+ b = rvScale * v;
+ } else {
+ r = rvScale * v;
+ b = buScale * u;
+ }
+
+ yTL *= yScale;
+ yTR *= yScale;
+ yBL *= yScale;
+ yBR *= yScale;
+
+ if (bits == 24) {
+ /* Write out top two pixels */
+ rgb[0] = LIMIT (b + yTL);
+ rgb[1] = LIMIT (g + yTL);
+ rgb[2] = LIMIT (r + yTL);
+
+ rgb[3] = LIMIT (b + yTR);
+ rgb[4] = LIMIT (g + yTR);
+ rgb[5] = LIMIT (r + yTR);
+
+ /* Skip down to next line to write out bottom two pixels */
+ rgb += 3 * rowPixels;
+ rgb[0] = LIMIT (b + yBL);
+ rgb[1] = LIMIT (g + yBL);
+ rgb[2] = LIMIT (r + yBL);
+
+ rgb[3] = LIMIT (b + yBR);
+ rgb[4] = LIMIT (g + yBR);
+ rgb[5] = LIMIT (r + yBR);
+ } else if (bits == 16) {
+ /* Write out top two pixels */
+ rgb[0] = ((LIMIT (b + yTL) >> 3) & 0x1F)
+ | ((LIMIT (g + yTL) << 3) & 0xE0);
+ rgb[1] = ((LIMIT (g + yTL) >> 5) & 0x07)
+ | (LIMIT (r + yTL) & 0xF8);
+
+ rgb[2] = ((LIMIT (b + yTR) >> 3) & 0x1F)
+ | ((LIMIT (g + yTR) << 3) & 0xE0);
+ rgb[3] = ((LIMIT (g + yTR) >> 5) & 0x07)
+ | (LIMIT (r + yTR) & 0xF8);
+
+ /* Skip down to next line to write out bottom two pixels */
+ rgb += 2 * rowPixels;
+
+ rgb[0] = ((LIMIT (b + yBL) >> 3) & 0x1F)
+ | ((LIMIT (g + yBL) << 3) & 0xE0);
+ rgb[1] = ((LIMIT (g + yBL) >> 5) & 0x07)
+ | (LIMIT (r + yBL) & 0xF8);
+
+ rgb[2] = ((LIMIT (b + yBR) >> 3) & 0x1F)
+ | ((LIMIT (g + yBR) << 3) & 0xE0);
+ rgb[3] = ((LIMIT (g + yBR) >> 5) & 0x07)
+ | (LIMIT (r + yBR) & 0xF8);
+ }
+}
+
+void fix_colour (char *image, int x, int y)
+{
+ int i;
+ char tmp;
+ i = x * y;
+ while (--i) {
+ tmp = image[0];
+ image[0] = image[2];
+ image[2] = tmp;
+ image += 3;
+ }
+}
+
+void negative (unsigned char *image, int x, int y, int z)
+{
+ int i;
+ for (i = 0; i < x * y * z; i++) {
+ image[i] = 255 - image[i];
+
+ }
+}
+
+void threshold (unsigned char *image, int x, int y, int threshold_value)
+{
+ int i;
+ for (i = 0; i < x * y; i++) {
+ if ((image[0] + image[1] + image[2]) > (threshold_value * 3)) {
+ image[0] = 255;
+ image[1] = 255;
+ image[2] = 255;
+ } else {
+ image[0] = 0;
+ image[1] = 0;
+ image[2] = 0;
+ }
+ image += 3;
+ }
+}
+
+void
+threshold_channel (unsigned char *image, int x, int y, int threshold_value)
+{
+ int i;
+ for (i = 0; i < x * y; i++) {
+ if (image[0] > threshold_value) {
+ image[0] = 255;
+ } else {
+ image[0] = 0;
+ }
+ if (image[1] > threshold_value) {
+ image[1] = 255;
+ } else {
+ image[1] = 0;
+ }
+ if (image[2] > threshold_value) {
+ image[2] = 255;
+ } else {
+ image[2] = 0;
+ }
+ image += 3;
+ }
+}
+
+void mirror (unsigned char *image, int x, int y, int z)
+{
+ int i, j, k;
+ unsigned char *image2;
+
+ image2 = (char *) malloc (sizeof (unsigned char) * x * y * z);
+ memcpy (image2, image, x * y * z);
+
+ for (i = 0; i < y; i++) {
+ for (j = 0; j < x; j++) {
+ for (k = 0; k < z; k++) {
+ /*ow, my brain! */
+ image[(i * x * z) + (j * z) + k] =
+ image2[(i * x * z) - (j * z) + k];
+ }
+
+ }
+
+ }
+
+ free (image2);
+
+}
+
+void wacky (unsigned char *image, int z, int x, int y)
+{
+ int i;
+ int neighbours;
+ int total;
+ unsigned char *image2, *image3;
+ image2 = (unsigned char *) malloc (sizeof (unsigned char) * x * y * z);
+ memcpy (image2, image, x * y * z);
+ image3 = image2;
+
+ for (i = 0; i < x * y; i++) {
+ total = 0;
+ neighbours = 0;
+
+ if (i < x * z) {
+ /*we are in the top row */
+ } else {
+ image2 -= (x + 1) * z;
+ total = total + ((1 / 6) * image2[0]);
+ image2 += z;
+ total = total + ((4 / 6) * image2[0]);
+ image2 += z;
+ total = total + ((1 / 6) * image2[0]);
+ neighbours = neighbours + z;
+ image2 += (x - 1) * z;
+ }
+ if (i > x * (y - 1) * z) {
+ /*we are in the bottom row */
+ } else {
+ image2 += (x + 1) * z;
+ total = total + ((1 / 6) * image2[0]);
+ image2 -= z;
+ total = total + ((4 / 6) * image2[0]);
+ image2 -= z;
+ total = total + ((1 / 6) * image2[0]);
+ image2 -= (x - 1) * z;
+ neighbours = neighbours + z;
+ }
+
+ image2 += z;
+ total = total + ((4 / 6) * image2[0]);
+ image2 -= z;
+ neighbours++;
+
+ image2 -= z;
+ total = total + ((4 / 6) * image2[0]);
+ image2 += z;
+ neighbours++;
+
+ image[0] = image[0] * (-20 / 6);
+ image[0] = image[0] + total;
+ image[1] = image[0];
+ image[2] = image[0];
+ image += z;
+ }
+ free (image2);
+}
+
+void smooth (unsigned char *image, int z, int x, int y)
+{
+ int i;
+ int neighbours;
+ int total0, total1, total2;
+ unsigned char *image2, *image3;
+ int tr = 0, br = 0;
+
+ image2 = (unsigned char *) malloc (sizeof (unsigned char) * x * y * z);
+ memcpy (image2, image, x * y * z);
+ image3 = image2;
+
+ for (i = 0; i < x * y; i++) {
+ total0 = 0;
+ total1 = 0;
+ total2 = 0;
+ neighbours = 0;
+
+ if (i < x) {
+ /*we are in the top row */
+ tr++;
+ } else {
+ image2 -= (x + 1) * z;
+ total0 = total0 + image2[0];
+ total1 = total1 + image2[1];
+ total2 = total2 + image2[2];
+
+ total0 = total0 + image2[3];
+ total1 = total1 + image2[4];
+ total2 = total2 + image2[5];
+
+ total0 = total0 + image2[6];
+ total1 = total1 + image2[7];
+ total2 = total2 + image2[8];
+ neighbours = neighbours + z;
+ if (tr > 1) {
+ tr = 0;
+ }
+ image2 += (x + 1) * z;
+ }
+ if (i > x * (y - 1)) {
+ br++;
+ /*we are in the bottom row */
+ } else {
+ image2 += (x - 1) * z;
+ total0 = total0 + image2[0];
+ total1 = total1 + image2[1];
+ total2 = total2 + image2[2];
+
+ total0 = total0 + image2[3];
+ total1 = total1 + image2[4];
+ total2 = total2 + image2[5];
+
+ total0 = total0 + image2[6];
+ total1 = total1 + image2[7];
+ total2 = total2 + image2[8];
+
+ image2 -= (x - 1) * z;
+
+ neighbours = neighbours + z;
+ }
+
+ image2 += 3;
+ total0 = total0 + image2[0];
+ total1 = total1 + image2[1];
+ total2 = total2 + image2[2];
+ image2 -= 3;
+ neighbours++;
+
+ image2 -= 3;
+ total0 = total0 + image2[0];
+ total1 = total1 + image2[1];
+ total2 = total2 + image2[2];
+ image2 += 3;
+ neighbours++;
+
+ image[0] = (int) (total0 / neighbours);
+ image[1] = (int) (total1 / neighbours);
+ image[2] = (int) (total2 / neighbours);
+
+ image += 3;
+ image2 += 3;
+ }
+ free (image3);
+
+}
+
+void laplace (unsigned char *image, int z, int x, int y)
+{
+ int i;
+ int neighbours;
+ int total0, total1, total2;
+ unsigned char *image2, *image3;
+
+ image2 = (unsigned char *) malloc (sizeof (unsigned char) * x * y * z);
+ memcpy (image2, image, x * y * z);
+ image3 = image2;
+
+ for (i = 1; i < x * (y - 1); i++) {
+ total0 = 0;
+ total1 = 0;
+ total2 = 0;
+ neighbours = 0;
+
+ image2 -= (x + 1) * 3;
+ total0 = total0 + image2[0];
+ total1 = total1 + image2[1];
+ total2 = total2 + image2[2];
+
+ total0 = total0 + image2[3];
+ total1 = total1 + image2[4];
+ total2 = total2 + image2[5];
+
+ total0 = total0 + image2[6];
+ total1 = total1 + image2[7];
+ total2 = total2 + image2[8];
+
+ image2 += (x + 1) * 3;
+
+ image2 += (x - 1) * 3;
+ total0 = total0 + image2[0];
+ total1 = total1 + image2[1];
+ total2 = total2 + image2[2];
+
+ total0 = total0 + image2[3];
+ total1 = total1 + image2[4];
+ total2 = total2 + image2[5];
+
+ total0 = total0 + image2[6];
+ total1 = total1 + image2[7];
+ total2 = total2 + image2[8];
+
+ image2 -= (x - 1) * 3;
+
+ image2 += 3;
+ total0 = total0 + image2[0];
+ total1 = total1 + image2[1];
+ total2 = total2 + image2[2];
+ image2 -= 3;
+
+ image2 -= 3;
+ total0 = total0 + image2[0];
+ total1 = total1 + image2[1];
+ total2 = total2 + image2[2];
+ image2 += 3;
+
+ if (image[0] * 8 < total0) {
+ image[0] = 0;
+ } else {
+ image[0] = (image[0] * 8) - total0;
+ }
+ if (image[1] * 8 < total1) {
+ image[1] = 0;
+ } else {
+ image[1] = (image[1] * 8) - total1;
+ }
+ if (image[2] * 8 < total2) {
+ image[2] = 0;
+ } else {
+ image[2] = (image[2] * 8) - total2;
+ }
+
+ image += 3;
+ image2 += 3;
+ }
+
+ free (image3);
+
+}
+
+void bw (unsigned char *image, int x, int y)
+{
+ int i;
+ int total, avg;
+
+ for (i = 0; i < x * y; i++) {
+ total = image[0] + image[1] + image[2];
+ avg = (int) (total / 3);
+
+ image[0] = avg;
+ image[1] = avg;
+ image[2] = avg;
+ image += 3;
+ }
+}
+void bw2 (unsigned char *image, int x, int y)
+{
+ int i;
+ int avg;
+ for (i = 0; i < x * y; i++) {
+ avg = (int) ((image[0] * 0.2125) + (image[1] * 0.7154) +
+ (image[2] * 0.0721));
+
+ image[0] = avg;
+ image[1] = avg;
+ image[2] = avg;
+ image += 3; /* bump to next triplet */
+ }
+}
+
+/* fix this at some point, very slow */
+void sobel (unsigned char *image, int x, int y)
+{
+ int i, j, grad[3];
+ int deltaX[3], deltaY[3];
+ int width = x * 3;
+ unsigned char *image2;
+
+ image2 = (char *) malloc (sizeof (unsigned char) * (x * y * 3));
+
+ for (i = width; i < (y - 1) * width; i++) {
+ for (j = 0; j <= 2; j++) {
+ deltaX[j] =
+ 2 * image[i + 1] + image[i - width + 1] +
+ image[i + width + 1] - 2 * image[i - 1] -
+ image[i - width - 1] - image[i + width - 1];
+
+ deltaY[j] =
+ image[i - width - 1] + 2 * image[i -
+ width] +
+ image[i - width + 1] - image[i + width -
+ 1] -
+ 2 * image[i + width] - image[i + width + 1];
+ grad[j] = (abs (deltaX[j]) + abs (deltaY[j]));
+ grad[j] = grad[j] / 5.66; /* <<<<<------------------------ new line */
+ if (grad[j] > 255) {
+ grad[j] = 255;
+ }
+ image2[i + j] = (unsigned char) grad[j];
+ }
+ }
+
+ memcpy (image, image2, (x * y * 3));
+ free (image2);
+}
diff --git a/src/filter.h b/src/filter.h
new file mode 100644
index 0000000..0735d67
--- /dev/null
+++ b/src/filter.h
@@ -0,0 +1,13 @@
+void yuv420p_to_rgb(unsigned char *image, unsigned char *temp, int x, int y, int z);
+void fix_colour(char *image, int x, int y);
+void negative(unsigned char *image, int x, int y, int z);
+void threshold(unsigned char *image, int x, int y, int threshold_value);
+void threshold_channel(unsigned char *image, int x, int y, int threshold_value);
+void mirror(unsigned char *image, int x, int y, int z);
+void wacky(unsigned char *image, int z, int x, int y);
+void smooth(unsigned char *image, int z, int x, int y);
+
+void bw(unsigned char *image, int x, int y);
+void bw2(unsigned char *image, int x, int y);
+void laplace(unsigned char *image, int z, int x, int y);
+void sobel(unsigned char *image, int x, int y);
diff --git a/src/font_6x11.h b/src/font_6x11.h
new file mode 100644
index 0000000..a88c8a7
--- /dev/null
+++ b/src/font_6x11.h
@@ -0,0 +1,3337 @@
+/**********************************************/
+/* */
+/* Font file generated by rthelen */
+/* */
+/**********************************************/
+
+static unsigned char fontdata[] = {
+
+ /* 0 0x00 '^A' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 1 0x01 '^B' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 2 0x02 '^C' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 3 0x03 '^D' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 4 0x04 '^E' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 5 0x05 '^F' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 6 0x06 '^G' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 7 0x07 '^H' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 8 0x08 '^I' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 9 0x09 '^J' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 10 0x0a '^K' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 11 0x0b '^L' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 12 0x0c '^M' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 13 0x0d '^N' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 14 0x0e '^O' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 15 0x0f '^P' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 16 0x10 '^Q' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 17 0x11 '^R' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x28, /* 00 0 000 */
+ 0x54, /* 0 0 0 00 */
+ 0x38, /* 00 000 */
+ 0x54, /* 0 0 0 00 */
+ 0x28, /* 00 0 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 18 0x12 '^S' */
+ 0x04, /* 00000 00 */
+ 0x04, /* 00000 00 */
+ 0x08, /* 0000 000 */
+ 0x08, /* 0000 000 */
+ 0x50, /* 0 0 0000 */
+ 0x50, /* 0 0 0000 */
+ 0x20, /* 00 00000 */
+ 0x20, /* 00 00000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 19 0x13 '^T' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x10, /* 000 0000 */
+ 0x38, /* 00 000 */
+ 0x7c, /* 0 00 */
+ 0x38, /* 00 000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 20 0x14 '^U' */
+ 0x18, /* 000 000 */
+ 0x10, /* 000 0000 */
+ 0x28, /* 00 0 000 */
+ 0x7c, /* 0 00 */
+ 0x78, /* 0 000 */
+ 0x78, /* 0 000 */
+ 0x7c, /* 0 00 */
+ 0x28, /* 00 0 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 21 0x15 '^V' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 22 0x16 '^W' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 23 0x17 '^X' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 24 0x18 '^Y' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 25 0x19 '^Z' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 26 0x1a '^[' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 27 0x1b '^\' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 28 0x1c '^]' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 29 0x1d '^^' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 30 0x1e '^_' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 31 0x1f '^`' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 32 0x20 ' ' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 33 0x21 '!' */
+ 0x00, /* 00000000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 34 0x22 '"' */
+ 0x28, /* 00 0 000 */
+ 0x28, /* 00 0 000 */
+ 0x28, /* 00 0 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 35 0x23 '#' */
+ 0x00, /* 00000000 */
+ 0x28, /* 00 0 000 */
+ 0x7c, /* 0 00 */
+ 0x28, /* 00 0 000 */
+ 0x7c, /* 0 00 */
+ 0x28, /* 00 0 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 36 0x24 '$' */
+ 0x10, /* 000 0000 */
+ 0x38, /* 00 000 */
+ 0x54, /* 0 0 0 00 */
+ 0x50, /* 0 0 0000 */
+ 0x38, /* 00 000 */
+ 0x14, /* 000 0 00 */
+ 0x54, /* 0 0 0 00 */
+ 0x38, /* 00 000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 37 0x25 '%' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x54, /* 0 0 0 00 */
+ 0x58, /* 0 0 000 */
+ 0x28, /* 00 0 000 */
+ 0x34, /* 00 0 00 */
+ 0x54, /* 0 0 0 00 */
+ 0x48, /* 0 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 38 0x26 '&' */
+ 0x00, /* 00000000 */
+ 0x30, /* 00 0000 */
+ 0x48, /* 0 00 000 */
+ 0x50, /* 0 0 0000 */
+ 0x20, /* 00 00000 */
+ 0x54, /* 0 0 0 00 */
+ 0x48, /* 0 00 000 */
+ 0x34, /* 00 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 39 0x27 ''' */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 40 0x28 '(' */
+ 0x04, /* 00000 00 */
+ 0x08, /* 0000 000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x08, /* 0000 000 */
+ 0x04, /* 00000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 41 0x29 ')' */
+ 0x20, /* 00 00000 */
+ 0x10, /* 000 0000 */
+ 0x08, /* 0000 000 */
+ 0x08, /* 0000 000 */
+ 0x08, /* 0000 000 */
+ 0x08, /* 0000 000 */
+ 0x08, /* 0000 000 */
+ 0x10, /* 000 0000 */
+ 0x20, /* 00 00000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 42 0x2a '*' */
+ 0x00, /* 00000000 */
+ 0x10, /* 000 0000 */
+ 0x54, /* 0 0 0 00 */
+ 0x38, /* 00 000 */
+ 0x54, /* 0 0 0 00 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 43 0x2b '+' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x7c, /* 0 00 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 44 0x2c ',' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x30, /* 00 0000 */
+ 0x30, /* 00 0000 */
+ 0x10, /* 000 0000 */
+ 0x20, /* 00 00000 */
+ 0x00, /* 00000000 */
+
+ /* 45 0x2d '-' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x7c, /* 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 46 0x2e '.' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x18, /* 000 000 */
+ 0x18, /* 000 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 47 0x2f '/' */
+ 0x04, /* 00000 00 */
+ 0x04, /* 00000 00 */
+ 0x08, /* 0000 000 */
+ 0x08, /* 0000 000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x20, /* 00 00000 */
+ 0x20, /* 00 00000 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x00, /* 00000000 */
+
+ /* 48 0x30 '0' */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x4c, /* 0 00 00 */
+ 0x54, /* 0 0 0 00 */
+ 0x64, /* 0 00 00 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 49 0x31 '1' */
+ 0x00, /* 00000000 */
+ 0x08, /* 0000 000 */
+ 0x18, /* 000 000 */
+ 0x08, /* 0000 000 */
+ 0x08, /* 0000 000 */
+ 0x08, /* 0000 000 */
+ 0x08, /* 0000 000 */
+ 0x1c, /* 000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 50 0x32 '2' */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x04, /* 00000 00 */
+ 0x08, /* 0000 000 */
+ 0x10, /* 000 0000 */
+ 0x20, /* 00 00000 */
+ 0x7c, /* 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 51 0x33 '3' */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x04, /* 00000 00 */
+ 0x18, /* 000 000 */
+ 0x04, /* 00000 00 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 52 0x34 '4' */
+ 0x00, /* 00000000 */
+ 0x08, /* 0000 000 */
+ 0x18, /* 000 000 */
+ 0x28, /* 00 0 000 */
+ 0x48, /* 0 00 000 */
+ 0x7c, /* 0 00 */
+ 0x08, /* 0000 000 */
+ 0x1c, /* 000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 53 0x35 '5' */
+ 0x00, /* 00000000 */
+ 0x7c, /* 0 00 */
+ 0x40, /* 0 000000 */
+ 0x78, /* 0 000 */
+ 0x04, /* 00000 00 */
+ 0x04, /* 00000 00 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 54 0x36 '6' */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x40, /* 0 000000 */
+ 0x78, /* 0 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 55 0x37 '7' */
+ 0x00, /* 00000000 */
+ 0x7c, /* 0 00 */
+ 0x04, /* 00000 00 */
+ 0x04, /* 00000 00 */
+ 0x08, /* 0000 000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 56 0x38 '8' */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 57 0x39 '9' */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x3c, /* 00 00 */
+ 0x04, /* 00000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 58 0x3a ':' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x18, /* 000 000 */
+ 0x18, /* 000 000 */
+ 0x00, /* 00000000 */
+ 0x18, /* 000 000 */
+ 0x18, /* 000 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 59 0x3b ';' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x30, /* 00 0000 */
+ 0x30, /* 00 0000 */
+ 0x00, /* 00000000 */
+ 0x30, /* 00 0000 */
+ 0x30, /* 00 0000 */
+ 0x10, /* 000 0000 */
+ 0x20, /* 00 00000 */
+ 0x00, /* 00000000 */
+
+ /* 60 0x3c '<' */
+ 0x00, /* 00000000 */
+ 0x04, /* 00000 00 */
+ 0x08, /* 0000 000 */
+ 0x10, /* 000 0000 */
+ 0x20, /* 00 00000 */
+ 0x10, /* 000 0000 */
+ 0x08, /* 0000 000 */
+ 0x04, /* 00000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 61 0x3d '=' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x7c, /* 0 00 */
+ 0x00, /* 00000000 */
+ 0x7c, /* 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 62 0x3e '>' */
+ 0x00, /* 00000000 */
+ 0x20, /* 00 00000 */
+ 0x10, /* 000 0000 */
+ 0x08, /* 0000 000 */
+ 0x04, /* 00000 00 */
+ 0x08, /* 0000 000 */
+ 0x10, /* 000 0000 */
+ 0x20, /* 00 00000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 63 0x3f '?' */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x04, /* 00000 00 */
+ 0x08, /* 0000 000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 64 0x40 '@' */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x74, /* 0 0 00 */
+ 0x54, /* 0 0 0 00 */
+ 0x78, /* 0 000 */
+ 0x40, /* 0 000000 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 65 0x41 'A' */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x7c, /* 0 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 66 0x42 'B' */
+ 0x00, /* 00000000 */
+ 0x78, /* 0 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x78, /* 0 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x78, /* 0 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 67 0x43 'C' */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 68 0x44 'D' */
+ 0x00, /* 00000000 */
+ 0x78, /* 0 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x78, /* 0 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 69 0x45 'E' */
+ 0x00, /* 00000000 */
+ 0x7c, /* 0 00 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x78, /* 0 000 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x7c, /* 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 70 0x46 'F' */
+ 0x00, /* 00000000 */
+ 0x7c, /* 0 00 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x78, /* 0 000 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 71 0x47 'G' */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x40, /* 0 000000 */
+ 0x4c, /* 0 00 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 72 0x48 'H' */
+ 0x00, /* 00000000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x7c, /* 0 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 73 0x49 'I' */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 74 0x4a 'J' */
+ 0x00, /* 00000000 */
+ 0x04, /* 00000 00 */
+ 0x04, /* 00000 00 */
+ 0x04, /* 00000 00 */
+ 0x04, /* 00000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 75 0x4b 'K' */
+ 0x00, /* 00000000 */
+ 0x44, /* 0 000 00 */
+ 0x48, /* 0 00 000 */
+ 0x50, /* 0 0 0000 */
+ 0x60, /* 0 00000 */
+ 0x50, /* 0 0 0000 */
+ 0x48, /* 0 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 76 0x4c 'L' */
+ 0x00, /* 00000000 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x7c, /* 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 77 0x4d 'M' */
+ 0x00, /* 00000000 */
+ 0x44, /* 0 000 00 */
+ 0x6c, /* 0 0 00 */
+ 0x54, /* 0 0 0 00 */
+ 0x54, /* 0 0 0 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 78 0x4e 'N' */
+ 0x00, /* 00000000 */
+ 0x44, /* 0 000 00 */
+ 0x64, /* 0 00 00 */
+ 0x54, /* 0 0 0 00 */
+ 0x4c, /* 0 00 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 79 0x4f 'O' */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 80 0x50 'P' */
+ 0x00, /* 00000000 */
+ 0x78, /* 0 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x78, /* 0 000 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 81 0x51 'Q' */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x54, /* 0 0 0 00 */
+ 0x38, /* 00 000 */
+ 0x04, /* 00000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 82 0x52 'R' */
+ 0x00, /* 00000000 */
+ 0x78, /* 0 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x78, /* 0 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 83 0x53 'S' */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x40, /* 0 000000 */
+ 0x38, /* 00 000 */
+ 0x04, /* 00000 00 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 84 0x54 'T' */
+ 0x00, /* 00000000 */
+ 0x7c, /* 0 00 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 85 0x55 'U' */
+ 0x00, /* 00000000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 86 0x56 'V' */
+ 0x00, /* 00000000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x28, /* 00 0 000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 87 0x57 'W' */
+ 0x00, /* 00000000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x54, /* 0 0 0 00 */
+ 0x54, /* 0 0 0 00 */
+ 0x6c, /* 0 0 00 */
+ 0x44, /* 0 000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 88 0x58 'X' */
+ 0x00, /* 00000000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x28, /* 00 0 000 */
+ 0x10, /* 000 0000 */
+ 0x28, /* 00 0 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 89 0x59 'Y' */
+ 0x00, /* 00000000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x28, /* 00 0 000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 90 0x5a 'Z' */
+ 0x00, /* 00000000 */
+ 0x7c, /* 0 00 */
+ 0x04, /* 00000 00 */
+ 0x08, /* 0000 000 */
+ 0x10, /* 000 0000 */
+ 0x20, /* 00 00000 */
+ 0x40, /* 0 000000 */
+ 0x7c, /* 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 91 0x5b '[' */
+ 0x0c, /* 0000 00 */
+ 0x08, /* 0000 000 */
+ 0x08, /* 0000 000 */
+ 0x08, /* 0000 000 */
+ 0x08, /* 0000 000 */
+ 0x08, /* 0000 000 */
+ 0x08, /* 0000 000 */
+ 0x08, /* 0000 000 */
+ 0x0c, /* 0000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 92 0x5c '\' */
+ 0x20, /* 00 00000 */
+ 0x20, /* 00 00000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x08, /* 0000 000 */
+ 0x08, /* 0000 000 */
+ 0x04, /* 00000 00 */
+ 0x04, /* 00000 00 */
+ 0x02, /* 000000 0 */
+ 0x02, /* 000000 0 */
+ 0x00, /* 00000000 */
+
+ /* 93 0x5d ']' */
+ 0x30, /* 00 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x30, /* 00 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 94 0x5e '^' */
+ 0x00, /* 00000000 */
+ 0x10, /* 000 0000 */
+ 0x28, /* 00 0 000 */
+ 0x44, /* 0 000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 95 0x5f '_' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x7e, /* 0 0 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 96 0x60 '`' */
+ 0x20, /* 00 00000 */
+ 0x10, /* 000 0000 */
+ 0x08, /* 0000 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 97 0x61 'a' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x4c, /* 0 00 00 */
+ 0x34, /* 00 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 98 0x62 'b' */
+ 0x00, /* 00000000 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x78, /* 0 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x78, /* 0 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 99 0x63 'c' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x40, /* 0 000000 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 100 0x64 'd' */
+ 0x00, /* 00000000 */
+ 0x04, /* 00000 00 */
+ 0x04, /* 00000 00 */
+ 0x3c, /* 00 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 101 0x65 'e' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x7c, /* 0 00 */
+ 0x40, /* 0 000000 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 102 0x66 'f' */
+ 0x00, /* 00000000 */
+ 0x0c, /* 0000 00 */
+ 0x10, /* 000 0000 */
+ 0x38, /* 00 000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 103 0x67 'g' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x3c, /* 00 00 */
+ 0x04, /* 00000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+
+ /* 104 0x68 'h' */
+ 0x00, /* 00000000 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x78, /* 0 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 105 0x69 'i' */
+ 0x00, /* 00000000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x30, /* 00 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 106 0x6a 'j' */
+ 0x00, /* 00000000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x30, /* 00 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x60, /* 0 00000 */
+ 0x00, /* 00000000 */
+
+ /* 107 0x6b 'k' */
+ 0x00, /* 00000000 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x48, /* 0 00 000 */
+ 0x50, /* 0 0 0000 */
+ 0x70, /* 0 0000 */
+ 0x48, /* 0 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 108 0x6c 'l' */
+ 0x00, /* 00000000 */
+ 0x30, /* 00 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 109 0x6d 'm' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x78, /* 0 000 */
+ 0x54, /* 0 0 0 00 */
+ 0x54, /* 0 0 0 00 */
+ 0x54, /* 0 0 0 00 */
+ 0x54, /* 0 0 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 110 0x6e 'n' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x58, /* 0 0 000 */
+ 0x64, /* 0 00 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 111 0x6f 'o' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 112 0x70 'p' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x78, /* 0 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x78, /* 0 000 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x00, /* 00000000 */
+
+ /* 113 0x71 'q' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x3c, /* 00 00 */
+ 0x04, /* 00000 00 */
+ 0x04, /* 00000 00 */
+ 0x00, /* 00000000 */
+
+ /* 114 0x72 'r' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x58, /* 0 0 000 */
+ 0x64, /* 0 00 00 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 115 0x73 's' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x40, /* 0 000000 */
+ 0x38, /* 00 000 */
+ 0x04, /* 00000 00 */
+ 0x78, /* 0 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 116 0x74 't' */
+ 0x00, /* 00000000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x38, /* 00 000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x0c, /* 0000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 117 0x75 'u' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x4c, /* 0 00 00 */
+ 0x34, /* 00 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 118 0x76 'v' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x28, /* 00 0 000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 119 0x77 'w' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x54, /* 0 0 0 00 */
+ 0x54, /* 0 0 0 00 */
+ 0x54, /* 0 0 0 00 */
+ 0x54, /* 0 0 0 00 */
+ 0x28, /* 00 0 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 120 0x78 'x' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x44, /* 0 000 00 */
+ 0x28, /* 00 0 000 */
+ 0x10, /* 000 0000 */
+ 0x28, /* 00 0 000 */
+ 0x44, /* 0 000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 121 0x79 'y' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x3c, /* 00 00 */
+ 0x04, /* 00000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+
+ /* 122 0x7a 'z' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x7c, /* 0 00 */
+ 0x08, /* 0000 000 */
+ 0x10, /* 000 0000 */
+ 0x20, /* 00 00000 */
+ 0x7c, /* 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 123 0x7b '{' */
+ 0x08, /* 0000 000 */
+ 0x08, /* 0000 000 */
+ 0x08, /* 0000 000 */
+ 0x08, /* 0000 000 */
+ 0x10, /* 000 0000 */
+ 0x08, /* 0000 000 */
+ 0x08, /* 0000 000 */
+ 0x08, /* 0000 000 */
+ 0x08, /* 0000 000 */
+ 0x04, /* 00000 00 */
+ 0x00, /* 00000000 */
+
+ /* 124 0x7c '|' */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 125 0x7d '}' */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x08, /* 0000 000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x20, /* 00 00000 */
+ 0x00, /* 00000000 */
+
+ /* 126 0x7e '~' */
+ 0x00, /* 00000000 */
+ 0x34, /* 00 0 00 */
+ 0x58, /* 0 0 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 127 0x7f '^?' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 128 0x80 '\200' */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x7c, /* 0 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 129 0x81 '\201' */
+ 0x28, /* 00 0 000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x7c, /* 0 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 130 0x82 '\202' */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 131 0x83 '\203' */
+ 0x10, /* 000 0000 */
+ 0x7c, /* 0 00 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x78, /* 0 000 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x7c, /* 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 132 0x84 '\204' */
+ 0x58, /* 0 0 000 */
+ 0x44, /* 0 000 00 */
+ 0x64, /* 0 00 00 */
+ 0x54, /* 0 0 0 00 */
+ 0x4c, /* 0 00 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 133 0x85 '\205' */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 134 0x86 '\206' */
+ 0x00, /* 00000000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 135 0x87 '\207' */
+ 0x08, /* 0000 000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x4c, /* 0 00 00 */
+ 0x34, /* 00 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 136 0x88 '\210' */
+ 0x10, /* 000 0000 */
+ 0x08, /* 0000 000 */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x4c, /* 0 00 00 */
+ 0x34, /* 00 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 137 0x89 '\211' */
+ 0x10, /* 000 0000 */
+ 0x28, /* 00 0 000 */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x4c, /* 0 00 00 */
+ 0x34, /* 00 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 138 0x8a '\212' */
+ 0x00, /* 00000000 */
+ 0x28, /* 00 0 000 */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x4c, /* 0 00 00 */
+ 0x34, /* 00 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 139 0x8b '\213' */
+ 0x34, /* 00 0 00 */
+ 0x58, /* 0 0 000 */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x4c, /* 0 00 00 */
+ 0x34, /* 00 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 140 0x8c '\214' */
+ 0x18, /* 000 000 */
+ 0x24, /* 00 00 00 */
+ 0x18, /* 000 000 */
+ 0x3c, /* 00 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x4c, /* 0 00 00 */
+ 0x34, /* 00 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 141 0x8d '\215' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x3c, /* 00 00 */
+ 0x10, /* 000 0000 */
+ 0x20, /* 00 00000 */
+ 0x00, /* 00000000 */
+
+ /* 142 0x8e '\216' */
+ 0x08, /* 0000 000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x7c, /* 0 00 */
+ 0x40, /* 0 000000 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 143 0x8f '\217' */
+ 0x20, /* 00 00000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x7c, /* 0 00 */
+ 0x40, /* 0 000000 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 144 0x90 '\220' */
+ 0x10, /* 000 0000 */
+ 0x28, /* 00 0 000 */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x7c, /* 0 00 */
+ 0x40, /* 0 000000 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 145 0x91 '\221' */
+ 0x00, /* 00000000 */
+ 0x28, /* 00 0 000 */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x7c, /* 0 00 */
+ 0x40, /* 0 000000 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 146 0x92 '\222' */
+ 0x08, /* 0000 000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 147 0x93 '\223' */
+ 0x20, /* 00 00000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 148 0x94 '\224' */
+ 0x10, /* 000 0000 */
+ 0x28, /* 00 0 000 */
+ 0x00, /* 00000000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 149 0x95 '\225' */
+ 0x00, /* 00000000 */
+ 0x28, /* 00 0 000 */
+ 0x00, /* 00000000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 150 0x96 '\226' */
+ 0x34, /* 00 0 00 */
+ 0x58, /* 0 0 000 */
+ 0x00, /* 00000000 */
+ 0x58, /* 0 0 000 */
+ 0x64, /* 0 00 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 151 0x97 '\227' */
+ 0x08, /* 0000 000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 152 0x98 '\230' */
+ 0x20, /* 00 00000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 153 0x99 '\231' */
+ 0x10, /* 000 0000 */
+ 0x28, /* 00 0 000 */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 154 0x9a '\232' */
+ 0x00, /* 00000000 */
+ 0x28, /* 00 0 000 */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 155 0x9b '\233' */
+ 0x34, /* 00 0 00 */
+ 0x58, /* 0 0 000 */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 156 0x9c '\234' */
+ 0x08, /* 0000 000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x4c, /* 0 00 00 */
+ 0x34, /* 00 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 157 0x9d '\235' */
+ 0x20, /* 00 00000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x4c, /* 0 00 00 */
+ 0x34, /* 00 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 158 0x9e '\236' */
+ 0x10, /* 000 0000 */
+ 0x28, /* 00 0 000 */
+ 0x00, /* 00000000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x4c, /* 0 00 00 */
+ 0x34, /* 00 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 159 0x9f '\237' */
+ 0x00, /* 00000000 */
+ 0x28, /* 00 0 000 */
+ 0x00, /* 00000000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x4c, /* 0 00 00 */
+ 0x34, /* 00 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 160 0xa0 '\240' */
+ 0x00, /* 00000000 */
+ 0x10, /* 000 0000 */
+ 0x38, /* 00 000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 161 0xa1 '\241' */
+ 0x18, /* 000 000 */
+ 0x24, /* 00 00 00 */
+ 0x24, /* 00 00 00 */
+ 0x18, /* 000 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 162 0xa2 '\242' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x10, /* 000 0000 */
+ 0x38, /* 00 000 */
+ 0x54, /* 0 0 0 00 */
+ 0x50, /* 0 0 0000 */
+ 0x54, /* 0 0 0 00 */
+ 0x38, /* 00 000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 163 0xa3 '\243' */
+ 0x30, /* 00 0000 */
+ 0x48, /* 0 00 000 */
+ 0x40, /* 0 000000 */
+ 0x70, /* 0 0000 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x44, /* 0 000 00 */
+ 0x78, /* 0 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 164 0xa4 '\244' */
+ 0x44, /* 0 000 00 */
+ 0x24, /* 00 00 00 */
+ 0x50, /* 0 0 0000 */
+ 0x48, /* 0 00 000 */
+ 0x24, /* 00 00 00 */
+ 0x14, /* 000 0 00 */
+ 0x48, /* 0 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 165 0xa5 '\245' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x7c, /* 0 00 */
+ 0x7c, /* 0 00 */
+ 0x7c, /* 0 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 166 0xa6 '\246' */
+ 0x3c, /* 00 00 */
+ 0x54, /* 0 0 0 00 */
+ 0x54, /* 0 0 0 00 */
+ 0x54, /* 0 0 0 00 */
+ 0x3c, /* 00 00 */
+ 0x14, /* 000 0 00 */
+ 0x14, /* 000 0 00 */
+ 0x14, /* 000 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 167 0xa7 '\247' */
+ 0x18, /* 000 000 */
+ 0x24, /* 00 00 00 */
+ 0x44, /* 0 000 00 */
+ 0x48, /* 0 00 000 */
+ 0x48, /* 0 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x58, /* 0 0 000 */
+ 0x40, /* 0 000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 168 0xa8 '\250' */
+ 0x00, /* 00000000 */
+ 0x70, /* 0 0000 */
+ 0x08, /* 0000 000 */
+ 0x64, /* 0 00 00 */
+ 0x54, /* 0 0 0 00 */
+ 0x64, /* 0 00 00 */
+ 0x58, /* 0 0 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 169 0xa9 '\251' */
+ 0x00, /* 00000000 */
+ 0x70, /* 0 0000 */
+ 0x08, /* 0000 000 */
+ 0x34, /* 00 0 00 */
+ 0x44, /* 0 000 00 */
+ 0x34, /* 00 0 00 */
+ 0x08, /* 0000 000 */
+ 0x70, /* 0 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 170 0xaa '\252' */
+ 0x00, /* 00000000 */
+ 0x7a, /* 0 0 0 */
+ 0x2e, /* 00 0 0 */
+ 0x2e, /* 00 0 0 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 171 0xab '\253' */
+ 0x00, /* 00000000 */
+ 0x08, /* 0000 000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 172 0xac '\254' */
+ 0x00, /* 00000000 */
+ 0x28, /* 00 0 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 173 0xad '\255' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x08, /* 0000 000 */
+ 0x7c, /* 0 00 */
+ 0x10, /* 000 0000 */
+ 0x7c, /* 0 00 */
+ 0x20, /* 00 00000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 174 0xae '\256' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x50, /* 0 0 0000 */
+ 0x50, /* 0 0 0000 */
+ 0x78, /* 0 000 */
+ 0x50, /* 0 0 0000 */
+ 0x50, /* 0 0 0000 */
+ 0x5c, /* 0 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 175 0xaf '\257' */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x4c, /* 0 00 00 */
+ 0x54, /* 0 0 0 00 */
+ 0x64, /* 0 00 00 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 176 0xb0 '\260' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x6c, /* 0 0 00 */
+ 0x54, /* 0 0 0 00 */
+ 0x6c, /* 0 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 177 0xb1 '\261' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x7c, /* 0 00 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x7c, /* 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 178 0xb2 '\262' */
+ 0x00, /* 00000000 */
+ 0x08, /* 0000 000 */
+ 0x10, /* 000 0000 */
+ 0x20, /* 00 00000 */
+ 0x10, /* 000 0000 */
+ 0x08, /* 0000 000 */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 179 0xb3 '\263' */
+ 0x00, /* 00000000 */
+ 0x10, /* 000 0000 */
+ 0x08, /* 0000 000 */
+ 0x04, /* 00000 00 */
+ 0x08, /* 0000 000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x1c, /* 000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 180 0xb4 '\264' */
+ 0x00, /* 00000000 */
+ 0x44, /* 0 000 00 */
+ 0x28, /* 00 0 000 */
+ 0x7c, /* 0 00 */
+ 0x10, /* 000 0000 */
+ 0x7c, /* 0 00 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 181 0xb5 '\265' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x48, /* 0 00 000 */
+ 0x48, /* 0 00 000 */
+ 0x48, /* 0 00 000 */
+ 0x48, /* 0 00 000 */
+ 0x74, /* 0 0 00 */
+ 0x40, /* 0 000000 */
+ 0x40, /* 0 000000 */
+ 0x00, /* 00000000 */
+
+ /* 182 0xb6 '\266' */
+ 0x00, /* 00000000 */
+ 0x10, /* 000 0000 */
+ 0x08, /* 0000 000 */
+ 0x0c, /* 0000 00 */
+ 0x14, /* 000 0 00 */
+ 0x24, /* 00 00 00 */
+ 0x24, /* 00 00 00 */
+ 0x18, /* 000 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 183 0xb7 '\267' */
+ 0x00, /* 00000000 */
+ 0x7c, /* 0 00 */
+ 0x24, /* 00 00 00 */
+ 0x10, /* 000 0000 */
+ 0x08, /* 0000 000 */
+ 0x10, /* 000 0000 */
+ 0x24, /* 00 00 00 */
+ 0x7c, /* 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 184 0xb8 '\270' */
+ 0x00, /* 00000000 */
+ 0x7c, /* 0 00 */
+ 0x28, /* 00 0 000 */
+ 0x28, /* 00 0 000 */
+ 0x28, /* 00 0 000 */
+ 0x28, /* 00 0 000 */
+ 0x28, /* 00 0 000 */
+ 0x28, /* 00 0 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 185 0xb9 '\271' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x7c, /* 0 00 */
+ 0x28, /* 00 0 000 */
+ 0x28, /* 00 0 000 */
+ 0x28, /* 00 0 000 */
+ 0x28, /* 00 0 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 186 0xba '\272' */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x60, /* 0 00000 */
+ 0x00, /* 00000000 */
+
+ /* 187 0xbb '\273' */
+ 0x00, /* 00000000 */
+ 0x1c, /* 000 00 */
+ 0x24, /* 00 00 00 */
+ 0x24, /* 00 00 00 */
+ 0x1c, /* 000 00 */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 188 0xbc '\274' */
+ 0x00, /* 00000000 */
+ 0x18, /* 000 000 */
+ 0x24, /* 00 00 00 */
+ 0x24, /* 00 00 00 */
+ 0x18, /* 000 000 */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 189 0xbd '\275' */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x28, /* 00 0 000 */
+ 0x6c, /* 0 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 190 0xbe '\276' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x54, /* 0 0 0 00 */
+ 0x5c, /* 0 0 00 */
+ 0x50, /* 0 0 0000 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 191 0xbf '\277' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x4c, /* 0 00 00 */
+ 0x54, /* 0 0 0 00 */
+ 0x64, /* 0 00 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 192 0xc0 '\300' */
+ 0x00, /* 00000000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x10, /* 000 0000 */
+ 0x20, /* 00 00000 */
+ 0x40, /* 0 000000 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 193 0xc1 '\301' */
+ 0x00, /* 00000000 */
+ 0x08, /* 0000 000 */
+ 0x00, /* 00000000 */
+ 0x08, /* 0000 000 */
+ 0x08, /* 0000 000 */
+ 0x08, /* 0000 000 */
+ 0x08, /* 0000 000 */
+ 0x08, /* 0000 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 194 0xc2 '\302' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x7c, /* 0 00 */
+ 0x04, /* 00000 00 */
+ 0x04, /* 00000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 195 0xc3 '\303' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x0c, /* 0000 00 */
+ 0x08, /* 0000 000 */
+ 0x10, /* 000 0000 */
+ 0x50, /* 0 0 0000 */
+ 0x20, /* 00 00000 */
+ 0x20, /* 00 00000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 196 0xc4 '\304' */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x38, /* 00 000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x60, /* 0 00000 */
+ 0x00, /* 00000000 */
+
+ /* 197 0xc5 '\305' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x04, /* 00000 00 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x40, /* 0 000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 198 0xc6 '\306' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x10, /* 000 0000 */
+ 0x10, /* 000 0000 */
+ 0x28, /* 00 0 000 */
+ 0x28, /* 00 0 000 */
+ 0x44, /* 0 000 00 */
+ 0x7c, /* 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 199 0xc7 '\307' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x24, /* 00 00 00 */
+ 0x48, /* 0 00 000 */
+ 0x48, /* 0 00 000 */
+ 0x24, /* 00 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 200 0xc8 '\310' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x48, /* 0 00 000 */
+ 0x24, /* 00 00 00 */
+ 0x24, /* 00 00 00 */
+ 0x48, /* 0 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 201 0xc9 '\311' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x54, /* 0 0 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 202 0xca '\312' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 203 0xcb '\313' */
+ 0x10, /* 000 0000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x7c, /* 0 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 204 0xcc '\314' */
+ 0x58, /* 0 0 000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x7c, /* 0 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 205 0xcd '\315' */
+ 0x58, /* 0 0 000 */
+ 0x38, /* 00 000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 206 0xce '\316' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x50, /* 0 0 0000 */
+ 0x50, /* 0 0 0000 */
+ 0x58, /* 0 0 000 */
+ 0x50, /* 0 0 0000 */
+ 0x50, /* 0 0 0000 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 207 0xcf '\317' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x28, /* 00 0 000 */
+ 0x54, /* 0 0 0 00 */
+ 0x5c, /* 0 0 00 */
+ 0x50, /* 0 0 0000 */
+ 0x2c, /* 00 0 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 208 0xd0 '\320' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 209 0xd1 '\321' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x7e, /* 0 0 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 210 0xd2 '\322' */
+ 0x00, /* 00000000 */
+ 0x14, /* 000 0 00 */
+ 0x28, /* 00 0 000 */
+ 0x28, /* 00 0 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 211 0xd3 '\323' */
+ 0x00, /* 00000000 */
+ 0x14, /* 000 0 00 */
+ 0x14, /* 000 0 00 */
+ 0x28, /* 00 0 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 212 0xd4 '\324' */
+ 0x00, /* 00000000 */
+ 0x08, /* 0000 000 */
+ 0x10, /* 000 0000 */
+ 0x18, /* 000 000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 213 0xd5 '\325' */
+ 0x00, /* 00000000 */
+ 0x18, /* 000 000 */
+ 0x08, /* 0000 000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 214 0xd6 '\326' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x7c, /* 0 00 */
+ 0x00, /* 00000000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 215 0xd7 '\327' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x10, /* 000 0000 */
+ 0x28, /* 00 0 000 */
+ 0x44, /* 0 000 00 */
+ 0x28, /* 00 0 000 */
+ 0x10, /* 000 0000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 216 0xd8 '\330' */
+ 0x00, /* 00000000 */
+ 0x28, /* 00 0 000 */
+ 0x00, /* 00000000 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x44, /* 0 000 00 */
+ 0x3c, /* 00 00 */
+ 0x04, /* 00000 00 */
+ 0x38, /* 00 000 */
+ 0x00, /* 00000000 */
+
+ /* 217 0xd9 '\331' */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x7e, /* 0 0 */
+ 0x00, /* 00000000 */
+ 0x7e, /* 0 0 */
+ 0x00, /* 00000000 */
+ 0x7e, /* 0 0 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 218 0xda '\332' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 219 0xdb '\333' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 220 0xdc '\334' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 221 0xdd '\335' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 222 0xde '\336' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 223 0xdf '\337' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 224 0xe0 '\340' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 225 0xe1 '\341' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 226 0xe2 '\342' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 227 0xe3 '\343' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 228 0xe4 '\344' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 229 0xe5 '\345' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 230 0xe6 '\346' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 231 0xe7 '\347' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 232 0xe8 '\350' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 233 0xe9 '\351' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 234 0xea '\352' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 235 0xeb '\353' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 236 0xec '\354' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 237 0xed '\355' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 238 0xee '\356' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 239 0xef '\357' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 240 0xf0 '\360' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 241 0xf1 '\361' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 242 0xf2 '\362' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 243 0xf3 '\363' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 244 0xf4 '\364' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 245 0xf5 '\365' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 246 0xf6 '\366' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 247 0xf7 '\367' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 248 0xf8 '\370' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 249 0xf9 '\371' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 250 0xfa '\372' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 251 0xfb '\373' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 252 0xfc '\374' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 253 0xfd '\375' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 254 0xfe '\376' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+ /* 255 0xff '\377' */
+ 0x00, /* 00000000 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x3c, /* 00 00 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+ 0x00, /* 00000000 */
+
+};
diff --git a/src/interface.h b/src/interface.h
new file mode 100644
index 0000000..10b37b9
--- /dev/null
+++ b/src/interface.h
@@ -0,0 +1,25 @@
+#define PATH "/apps/camorama/preferences"
+#define KEY1 "/apps/camorama/preferences/save_dir"
+#define KEY2 "/apps/camorama/preferences/save_file"
+#define KEY3 "/apps/camorama/preferences/file_type"
+#define KEY4 "/apps/camorama/preferences/timestamp"
+#define KEY5 "/apps/camorama/preferences/hostname"
+#define KEY6 "/apps/camorama/preferences/login"
+#define KEY7 "/apps/camorama/preferences/password"
+#define KEY8 "/apps/camorama/preferences/remote_save_dir"
+#define KEY9 "/apps/camorama/preferences/remote_save_file"
+#define KEY10 "/apps/camorama/preferences/remote_file_type"
+#define KEY11 "/apps/camorama/preferences/remote_timestamp"
+#define KEY12 "/apps/camorama/preferences/local_capture"
+#define KEY13 "/apps/camorama/preferences/remote_capture"
+#define KEY14 "/apps/camorama/preferences/append_ts_to_file"
+#define KEY15 "/apps/camorama/preferences/remote_append_ts_to_file"
+#define KEY16 "/apps/camorama/preferences/timestamp_string"
+#define KEY17 "/apps/camorama/preferences/date_format"
+#define KEY18 "/apps/camorama/preferences/use_custom_string"
+#define KEY19 "/apps/camorama/preferences/drawdate"
+#define KEY20 "/apps/camorama/preferences/auto_capture"
+#define KEY21 "/apps/camorama/preferences/auto_capture_interval"
+#define KEY22 "/apps/camorama/preferences/show_adjustments"
+
+
diff --git a/src/main.c b/src/main.c
new file mode 100644
index 0000000..d03d939
--- /dev/null
+++ b/src/main.c
@@ -0,0 +1,623 @@
+#include <gnome.h>
+#include "interface.h"
+
+#include "callbacks.h"
+#include "support.h"
+#include <config.h>
+
+#include <gdk/gdkx.h>
+#include <gdk-pixbuf-xlib/gdk-pixbuf-xlib.h>
+#include <gdk-pixbuf-xlib/gdk-pixbuf-xlibrgb.h>
+#include <locale.h>
+
+GtkWidget *main_window, *prefswindow;
+state func_state;
+int frames, frames2, seconds;
+GtkWidget *dentry, *entry2, *string_entry, *format_selection;
+GtkWidget *host_entry, *directory_entry, *filename_entry, *login_entry,
+ *pw_entry;
+
+static gboolean ver = FALSE, max = FALSE, min = FALSE, half =
+ FALSE, use_read = FALSE;
+
+/*static gint tray_icon_destroyed (GtkWidget *tray, gpointer data)
+{
+ GConfClient *client = gconf_client_get_default ();
+
+ //Somehow the delete_event never got called, so we use "destroy"
+ if (tray != MyApp->GetMainWindow ()->docklet)
+ return true;
+ GtkWidget *new_tray = gnomemeeting_init_tray ();
+
+ if (gconf_client_get_bool
+ (client, GENERAL_KEY "do_not_disturb", 0))
+ gnomemeeting_tray_set_content (new_tray, 2);
+
+
+ MyApp->GetMainWindow ()->docklet = GTK_WIDGET (new_tray);
+ gtk_widget_show (gm);
+
+ return true;
+}*/
+
+static gint
+tray_clicked_callback (GtkWidget * widget, GdkEventButton * event, cam * cam)
+{
+ GdkEventButton *event_button = NULL;
+
+ if (event->type == GDK_BUTTON_PRESS) {
+
+ event_button = (GdkEventButton *) event;
+
+ //change to switch
+ if (event_button->button == 1) {
+ if (GTK_WIDGET_VISIBLE
+ (glade_xml_get_widget (cam->xml, "window2"))) {
+ cam->hidden = TRUE;
+ gtk_idle_remove(cam->idle_id);
+ gtk_widget_hide (glade_xml_get_widget (cam->xml, "window2"));
+
+ } else {
+ cam->idle_id = gtk_idle_add ((GSourceFunc) pt2Function, (gpointer) cam);
+ gtk_widget_show (glade_xml_get_widget (cam->xml, "window2"));
+ cam->hidden = FALSE;
+
+ }
+ return TRUE;
+ } else if (event_button->button == 3) {
+
+ //gw = MyApp->GetMainWindow ();
+
+ //gnomemeeting_component_view (NULL, (gpointer) gw->ldap_window);
+
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+void load_interface (cam * cam)
+{
+ gchar *title;
+ GdkPixbuf *logo = NULL, *scaled = NULL;
+ GtkWidget *eventbox = NULL, *image = NULL;
+ gint width, height;
+
+ (GtkTooltips *)cam->tooltips = gtk_tooltips_new ();
+ logo = (GdkPixbuf *) create_pixbuf (DATADIR "/pixmaps/camorama.png");
+ if (logo == NULL) {
+ printf ("\n\nLOGO NO GO\n\n");
+ }
+
+ gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &width, &height);
+ scaled =
+ gdk_pixbuf_scale_simple (logo, width, height, GDK_INTERP_BILINEAR);
+
+ image = gtk_image_new_from_pixbuf (scaled);
+
+ //image = gtk_image_new_from_stock (GNOME_STOCK_TRASH, GTK_ICON_SIZE_MENU);
+
+ if (cam->show_adjustments == FALSE) {
+ gtk_widget_hide (glade_xml_get_widget (cam->xml, "table6"));
+ gtk_widget_hide (glade_xml_get_widget (cam->xml, "vbox37"));
+ gtk_window_resize (GTK_WINDOW
+ (glade_xml_get_widget
+ (cam->xml, "window2")), 320, 240);
+
+ }
+
+ eventbox = gtk_event_box_new ();
+
+ gtk_widget_show (image);
+
+ gtk_widget_show (eventbox);
+
+ cam->tray_icon = egg_tray_icon_new ("Our cool tray icon");
+ update_tooltip (cam);
+ /* add the status to the plug */
+ g_object_set_data (G_OBJECT (cam->tray_icon), "image", image);
+ g_object_set_data (G_OBJECT (cam->tray_icon), "available",
+ GINT_TO_POINTER (1));
+ g_object_set_data (G_OBJECT (cam->tray_icon), "embedded",
+ GINT_TO_POINTER (0));
+ gtk_container_add (GTK_CONTAINER (eventbox), image);
+ gtk_container_add ((GtkContainer *)cam->tray_icon, eventbox);
+
+ g_signal_connect (G_OBJECT (eventbox), "button_press_event",
+ G_CALLBACK (tray_clicked_callback), cam);
+
+ //button = gtk_button_new_with_label ("This is a cool\ntray icon");
+ /*g_signal_connect (button, "clicked",
+ * G_CALLBACK (capture_func), cam);
+ * gtk_container_add (GTK_CONTAINER (cam->tray_icon), button); */
+ gtk_widget_show_all (GTK_WIDGET (cam->tray_icon));
+
+ /* connect the signals in the interface
+ * glade_xml_signal_autoconnect(xml);
+ * this won't work, can't pass data to callbacks. have to do it individually :(*/
+
+ title = g_strdup_printf ("Camorama - %s - %dx%d", cam->vid_cap.name,
+ cam->x, cam->y);
+ gtk_window_set_title (GTK_WINDOW
+ (glade_xml_get_widget (cam->xml, "window2")),
+ title);
+ g_free (title);
+
+ gtk_window_set_icon (GTK_WINDOW
+ (glade_xml_get_widget (cam->xml, "window2")), logo);
+ gtk_window_set_icon (GTK_WINDOW
+ (glade_xml_get_widget (cam->xml, "prefswindow")),
+ logo);
+
+ glade_xml_signal_connect_data (cam->xml, "on_show_effects_activate",
+ G_CALLBACK (on_show_effects_activate),
+ cam);
+ gtk_toggle_button_set_active ((GtkToggleButton *)
+ glade_xml_get_widget (cam->xml,
+ "togglebutton1"),
+ cam->show_adjustments);
+ glade_xml_signal_connect_data (cam->xml,
+ "on_show_adjustments1_activate",
+ G_CALLBACK
+ (on_show_adjustments1_activate), cam);
+
+ glade_xml_signal_connect_data (cam->xml, "on_large1_activate",
+ G_CALLBACK (on_change_size_activate), cam);
+ glade_xml_signal_connect_data (cam->xml, "on_medium1_activate",
+ G_CALLBACK (on_change_size_activate), cam);
+ glade_xml_signal_connect_data (cam->xml, "on_small1_activate",
+ G_CALLBACK (on_change_size_activate), cam);
+
+ //glade_xml_signal_connect_data(cam->xml, "capture_func", G_CALLBACK(on_change_size_activate), cam);
+ glade_xml_signal_connect_data (cam->xml, "capture_func",
+ G_CALLBACK (capture_func), cam);
+ glade_xml_signal_connect_data (cam->xml, "gtk_main_quit",
+ G_CALLBACK (delete_event), NULL);
+
+ /* sliders */
+ glade_xml_signal_connect_data (cam->xml,
+ "on_scale1_drag_data_received",
+ G_CALLBACK
+ (on_scale1_drag_data_received), cam);
+ gtk_range_set_value ((GtkRange *)
+ glade_xml_get_widget (cam->xml, "slider1"), 128);
+ glade_xml_signal_connect_data (cam->xml, "contrast_change",
+ G_CALLBACK (contrast_change), cam);
+ gtk_range_set_value ((GtkRange *)
+ glade_xml_get_widget (cam->xml, "slider2"),
+ (int) (cam->contrast / 256));
+ glade_xml_signal_connect_data (cam->xml, "brightness_change",
+ G_CALLBACK (brightness_change), cam);
+ gtk_range_set_value ((GtkRange *)
+ glade_xml_get_widget (cam->xml, "slider3"),
+ (int) (cam->brightness / 256));
+ glade_xml_signal_connect_data (cam->xml, "colour_change",
+ G_CALLBACK (colour_change), cam);
+ gtk_range_set_value ((GtkRange *)
+ glade_xml_get_widget (cam->xml, "slider4"),
+ (int) (cam->colour / 256));
+ glade_xml_signal_connect_data (cam->xml, "hue_change",
+ G_CALLBACK (hue_change), cam);
+ gtk_range_set_value ((GtkRange *)
+ glade_xml_get_widget (cam->xml, "slider5"),
+ (int) (cam->hue / 256));
+ glade_xml_signal_connect_data (cam->xml, "wb_change",
+ G_CALLBACK (wb_change), cam);
+ gtk_range_set_value ((GtkRange *)
+ glade_xml_get_widget (cam->xml, "slider6"),
+ (int) (cam->wb / 256));
+
+ /* buttons */
+ glade_xml_signal_connect_data (cam->xml, "fix_colour_func",
+ G_CALLBACK (fix_colour_func),
+ (gpointer) NULL);
+ glade_xml_signal_connect_data (cam->xml, "threshold_func1",
+ G_CALLBACK (threshold_func1),
+ (gpointer) NULL);
+ glade_xml_signal_connect_data (cam->xml, "threshold_ch_func",
+ G_CALLBACK (threshold_ch_func),
+ (gpointer) NULL);
+ glade_xml_signal_connect_data (cam->xml, "edge_func1",
+ G_CALLBACK (edge_func1), (gpointer) NULL);
+ glade_xml_signal_connect_data (cam->xml, "sobel_func",
+ G_CALLBACK (sobel_func), (gpointer) NULL);
+ glade_xml_signal_connect_data (cam->xml, "edge_func3",
+ G_CALLBACK (edge_func3), (gpointer) NULL);
+ glade_xml_signal_connect_data (cam->xml, "negative_func",
+ G_CALLBACK (negative_func),
+ (gpointer) NULL);
+ glade_xml_signal_connect_data (cam->xml, "mirror_func",
+ G_CALLBACK (mirror_func), (gpointer) NULL);
+ glade_xml_signal_connect_data (cam->xml, "colour_func",
+ G_CALLBACK (colour_func), (gpointer) NULL);
+ glade_xml_signal_connect_data (cam->xml, "smooth_func",
+ G_CALLBACK (smooth_func), (gpointer) NULL);
+ glade_xml_signal_connect_data (cam->xml, "edge_func1",
+ G_CALLBACK (edge_func1), (gpointer) NULL);
+
+ glade_xml_signal_connect_data (cam->xml,
+ "on_drawingarea1_expose_event",
+ G_CALLBACK
+ (on_drawingarea1_expose_event),
+ (gpointer) cam);
+ glade_xml_signal_connect_data (cam->xml, "on_status_show",
+ G_CALLBACK (on_status_show),
+ (gpointer) cam);
+ glade_xml_signal_connect_data (cam->xml, "on_quit1_activate",
+ G_CALLBACK (on_quit1_activate),
+ (gpointer) cam);
+ glade_xml_signal_connect_data (cam->xml, "on_preferences1_activate",
+ G_CALLBACK (on_preferences1_activate),
+ (gpointer) cam);
+ glade_xml_signal_connect_data (cam->xml, "on_about1_activate",
+ G_CALLBACK (on_about1_activate),
+ (gpointer) cam);
+
+ /* prefs */
+ glade_xml_signal_connect_data (cam->xml, "prefs_func",
+ G_CALLBACK (prefs_func), cam);
+
+ /* general */
+ glade_xml_signal_connect_data (cam->xml, "cap_func",
+ G_CALLBACK (cap_func), cam);
+
+ gtk_toggle_button_set_active ((GtkToggleButton *)
+ glade_xml_get_widget (cam->xml,
+ "captured_cb"),
+ cam->cap);
+
+ glade_xml_signal_connect_data (cam->xml, "rcap_func",
+ G_CALLBACK (rcap_func), cam);
+ gtk_toggle_button_set_active ((GtkToggleButton *)
+ glade_xml_get_widget (cam->xml,
+ "rcapture"),
+ cam->rcap);
+
+ glade_xml_signal_connect_data (cam->xml, "acap_func",
+ G_CALLBACK (acap_func), cam);
+ gtk_toggle_button_set_active ((GtkToggleButton *)
+ glade_xml_get_widget (cam->xml,
+ "acapture"),
+ cam->acap);
+
+ glade_xml_signal_connect_data (cam->xml, "interval_change",
+ G_CALLBACK (interval_change), cam);
+
+ gtk_spin_button_set_value ((GtkSpinButton *)
+ glade_xml_get_widget (cam->xml,
+ "interval_entry"),
+ (cam->timeout_interval / 60000));
+
+ /* local */
+ dentry = glade_xml_get_widget (cam->xml, "dentry");
+ entry2 = glade_xml_get_widget (cam->xml, "entry2");
+ gtk_entry_set_text (GTK_ENTRY
+ (gnome_file_entry_gtk_entry
+ (GNOME_FILE_ENTRY (dentry))), cam->pixdir);
+
+ gtk_entry_set_text (GTK_ENTRY (entry2), cam->capturefile);
+
+ glade_xml_signal_connect_data (cam->xml, "append_func",
+ G_CALLBACK (append_func), cam);
+ gtk_toggle_button_set_active ((GtkToggleButton *)
+ glade_xml_get_widget (cam->xml,
+ "appendbutton"),
+ cam->timefn);
+
+ glade_xml_signal_connect_data (cam->xml, "jpg_func",
+ G_CALLBACK (jpg_func), cam);
+ if (cam->savetype == JPEG) {
+ gtk_toggle_button_set_active ((GtkToggleButton *)
+ glade_xml_get_widget (cam->xml,
+ "jpgb"), TRUE);
+ }
+ glade_xml_signal_connect_data (cam->xml, "png_func",
+ G_CALLBACK (png_func), cam);
+ if (cam->savetype == PNG) {
+ gtk_toggle_button_set_active ((GtkToggleButton *)
+ glade_xml_get_widget (cam->xml,
+ "pngb"), TRUE);
+ }
+
+ glade_xml_signal_connect_data (cam->xml, "ts_func",
+ G_CALLBACK (ts_func), cam);
+ gtk_toggle_button_set_active ((GtkToggleButton *)
+ glade_xml_get_widget (cam->xml,
+ "tsbutton"),
+ cam->timestamp);
+
+ /* remote */
+ login_entry = glade_xml_get_widget (cam->xml, "login_entry");
+ host_entry = glade_xml_get_widget (cam->xml, "host_entry");
+ pw_entry = glade_xml_get_widget (cam->xml, "pw_entry");
+ directory_entry = glade_xml_get_widget (cam->xml, "directory_entry");
+ filename_entry = glade_xml_get_widget (cam->xml, "filename_entry");
+ gtk_entry_set_text (GTK_ENTRY (host_entry), cam->rhost);
+ gtk_entry_set_text (GTK_ENTRY (login_entry), cam->rlogin);
+ gtk_entry_set_text (GTK_ENTRY (pw_entry), cam->rpw);
+ gtk_entry_set_text (GTK_ENTRY (directory_entry), cam->rpixdir);
+ gtk_entry_set_text (GTK_ENTRY (filename_entry), cam->rcapturefile);
+
+ glade_xml_signal_connect_data (cam->xml, "rappend_func",
+ G_CALLBACK (rappend_func), cam);
+ gtk_toggle_button_set_active ((GtkToggleButton *)
+ glade_xml_get_widget (cam->xml,
+ "timecb"),
+ cam->rtimefn);
+
+ glade_xml_signal_connect_data (cam->xml, "rjpg_func",
+ G_CALLBACK (rjpg_func), cam);
+ if (cam->rsavetype == JPEG) {
+ gtk_toggle_button_set_active ((GtkToggleButton *)
+ glade_xml_get_widget (cam->xml,
+ "fjpgb"), TRUE);
+ }
+ glade_xml_signal_connect_data (cam->xml, "rpng_func",
+ G_CALLBACK (rpng_func), cam);
+ if (cam->rsavetype == PNG) {
+ gtk_toggle_button_set_active ((GtkToggleButton *)
+ glade_xml_get_widget (cam->xml,
+ "fpngb"), TRUE);
+ }
+
+ glade_xml_signal_connect_data (cam->xml, "rts_func",
+ G_CALLBACK (rts_func), cam);
+ gtk_toggle_button_set_active ((GtkToggleButton *)
+ glade_xml_get_widget (cam->xml,
+ "tsbutton2"),
+ cam->rtimestamp);
+
+ /* timestamp */
+ glade_xml_signal_connect_data (cam->xml, "customstring_func",
+ G_CALLBACK (customstring_func), cam);
+ gtk_toggle_button_set_active ((GtkToggleButton *)
+ glade_xml_get_widget (cam->xml, "cscb"),
+ cam->usestring);
+
+ string_entry = glade_xml_get_widget (cam->xml, "string_entry");
+ gtk_entry_set_text (GTK_ENTRY (string_entry), cam->ts_string);
+
+ glade_xml_signal_connect_data (cam->xml, "drawdate_func",
+ G_CALLBACK (drawdate_func), cam);
+ gtk_toggle_button_set_active ((GtkToggleButton *)
+ glade_xml_get_widget (cam->xml, "tscb"),
+ cam->usedate);
+
+ cam->status = glade_xml_get_widget (cam->xml, "status");
+ set_sensitive (cam);
+ gtk_widget_set_sensitive (glade_xml_get_widget
+ (cam->xml, "string_entry"), cam->usestring);
+
+ gtk_widget_set_size_request (glade_xml_get_widget (cam->xml, "da"),
+ cam->x, cam->y);
+
+ prefswindow = glade_xml_get_widget (cam->xml, "prefswindow");
+}
+
+int main (int argc, char *argv[])
+{
+ cam cam_object, *cam;
+ Display *display;
+ Screen *screen_num;
+ gchar *poopoo = NULL;
+ gchar *pixfilename = "camorama/camorama.png";
+ gchar *filename; //= "/usr/opt/garnome/share/camorama/camorama.glade";
+ int x = -1, y = -1;
+ gboolean buggery = FALSE;
+ GtkWidget *button;
+ GConfClient *gc;
+
+ const struct poptOption popt_options[] = {
+ {"version", 'V', POPT_ARG_NONE, &ver, 0,
+ N_("show version and exit"), NULL},
+ {"device", 'd', POPT_ARG_STRING, &poopoo, 0,
+ N_("v4l device to use"), NULL},
+ {"debug", 'D', POPT_ARG_NONE, &buggery, 0,
+ N_("enable debuging code"), NULL},
+ {"width", 'x', POPT_ARG_INT, &x, 0, N_("capture width"),
+ NULL},
+ {"height", 'y', POPT_ARG_INT, &y, 0, N_("capture height"),
+ NULL},
+ {"max", 'M', POPT_ARG_NONE, &max, 0,
+ N_("maximum capture size"), NULL},
+ {"min", 'm', POPT_ARG_NONE, &min, 0,
+ N_("minimum capture size"), NULL},
+ {"half", 'H', POPT_ARG_NONE, &half, 0,
+ N_("middle capture size"), NULL},
+ {"read", 'R', POPT_ARG_NONE, &use_read, 0,
+ N_("use read() rather than mmap()"), NULL},
+ POPT_TABLEEND
+ };
+
+ cam = &cam_object;
+ /* set some default values */
+ cam->frame_number = 0;
+ cam->pic = NULL;
+ cam->pixmap = NULL;
+ cam->size = PICHALF;
+ cam->video_dev = NULL;
+ cam->read = FALSE;
+
+ bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR);
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+ textdomain (GETTEXT_PACKAGE);
+ setlocale (LC_ALL, "");
+
+ /* gnome_program_init - initialize everything (gconf, threads, etc) */
+ gnome_program_init (PACKAGE, VERSION, LIBGNOMEUI_MODULE, argc, argv,
+ GNOME_PARAM_APP_DATADIR, DATADIR,
+ GNOME_PARAM_POPT_TABLE, popt_options,
+ GNOME_PARAM_HUMAN_READABLE_NAME, _("camorama"), NULL);
+
+ cam->debug = buggery;
+
+ if (poopoo == NULL) {
+ cam->video_dev = g_strdup ("/dev/video0");
+ } else {
+ cam->video_dev = g_strdup (poopoo);
+ }
+ cam->x = x;
+ cam->y = y;
+ glade_gnome_init ();
+
+ if (ver) {
+ fprintf (stderr, _("\n\nCamorama version %s\n\n"), VERSION);
+ exit (0);
+ }
+ if (max) {
+ cam->size = PICMAX;
+ }
+ if (min) {
+ cam->size = PICMIN;
+ }
+ if (half) {
+ cam->size = PICHALF;
+ }
+ if (use_read) {
+ printf ("gah!\n");
+ cam->read = TRUE;
+ }
+ gc = gconf_client_get_default ();
+ cam->gc = gc;
+
+ gconf_client_add_dir (cam->gc, PATH, GCONF_CLIENT_PRELOAD_NONE, NULL);
+ gconf_client_notify_add (cam->gc, KEY1, (void *) gconf_notify_func,
+ cam->pixdir, NULL, NULL);
+ gconf_client_notify_add (cam->gc, KEY5, (void *) gconf_notify_func,
+ cam->rhost, NULL, NULL);
+ gconf_client_notify_add (cam->gc, KEY2, (void *) gconf_notify_func,
+ cam->capturefile, NULL, NULL);
+ gconf_client_notify_add (cam->gc, KEY3,
+ (void *) gconf_notify_func_int,
+ GINT_TO_POINTER (cam->savetype), NULL, NULL);
+ gconf_client_notify_add (cam->gc, KEY4,
+ (void *) gconf_notify_func_bool,
+ &cam->timestamp, NULL, NULL);
+
+ cam->pixdir = g_strdup (gconf_client_get_string (cam->gc, KEY1, NULL));
+ cam->capturefile =
+ g_strdup (gconf_client_get_string (cam->gc, KEY2, NULL));
+ cam->rhost = g_strdup (gconf_client_get_string (cam->gc, KEY5, NULL));
+ cam->rlogin = g_strdup (gconf_client_get_string (cam->gc, KEY6, NULL));
+ cam->rpw = g_strdup (gconf_client_get_string (cam->gc, KEY7, NULL));
+ cam->rpixdir = g_strdup (gconf_client_get_string (cam->gc, KEY8, NULL));
+ cam->rcapturefile =
+ g_strdup (gconf_client_get_string (cam->gc, KEY9, NULL));
+ cam->savetype = gconf_client_get_int (cam->gc, KEY3, NULL);
+ cam->rsavetype = gconf_client_get_int (cam->gc, KEY10, NULL);
+ cam->ts_string =
+ g_strdup (gconf_client_get_string (cam->gc, KEY16, NULL));
+ cam->date_format = "%Y-%m-%d %H:%M:%S";
+ cam->timestamp = gconf_client_get_bool (cam->gc, KEY4, NULL);
+ cam->rtimestamp = gconf_client_get_bool (cam->gc, KEY11, NULL);
+
+ cam->cap = gconf_client_get_bool (cam->gc, KEY12, NULL);
+ cam->rcap = gconf_client_get_bool (cam->gc, KEY13, NULL);
+ cam->timefn = gconf_client_get_bool (cam->gc, KEY14, NULL);
+ cam->rtimefn = gconf_client_get_bool (cam->gc, KEY15, NULL);
+ cam->usestring = gconf_client_get_bool (cam->gc, KEY18, NULL);
+ cam->usedate = gconf_client_get_bool (cam->gc, KEY19, NULL);
+ cam->acap = gconf_client_get_bool (cam->gc, KEY20, NULL);
+ cam->timeout_interval = gconf_client_get_int (cam->gc, KEY21, NULL);
+ cam->show_adjustments = gconf_client_get_bool (cam->gc, KEY22, NULL);
+
+ /* get desktop depth */
+ display = (Display *) gdk_x11_get_default_xdisplay ();
+ screen_num = xlib_rgb_get_screen ();
+ gdk_pixbuf_xlib_init (display, 0);
+ cam->desk_depth = xlib_rgb_get_depth ();
+
+ func_state.wacky = 0;
+ func_state.threshold = 0;
+ func_state.laplace = 0;
+ func_state.negative = 0;
+ func_state.colour = 0;
+ func_state.mirror = 0;
+ func_state.smooth = 0;
+ func_state.fc = 1;
+
+ cam->dither = 128;
+
+ cam->dev = open (cam->video_dev, O_RDWR);
+
+ camera_cap (cam);
+ get_win_info (cam);
+
+ /* query/set window attributes */
+ cam->vid_win.x = 0;
+ cam->vid_win.y = 0;
+ cam->vid_win.width = cam->x;
+ cam->vid_win.height = cam->y;
+ cam->vid_win.chromakey = 0;
+ cam->vid_win.flags = 0;
+
+ set_win_info (cam);
+ get_win_info (cam);
+
+ /* get picture attributes */
+ get_pic_info (cam);
+
+ /* set_pic_info(cam); */
+ cam->contrast = cam->vid_pic.contrast;
+ cam->brightness = cam->vid_pic.brightness;
+ cam->colour = cam->vid_pic.colour;
+ cam->hue = cam->vid_pic.hue;
+ cam->wb = cam->vid_pic.whiteness;
+ cam->depth = cam->vid_pic.depth / 8;
+ cam->pic_buf = malloc (cam->x * cam->y * cam->depth);
+ cam->tmp =
+ malloc (cam->vid_cap.maxwidth * cam->vid_cap.maxheight * cam->depth);
+ //cam->tmp = NULL;
+ /* set the buffer size */
+ if (cam->read == FALSE) {
+ set_buffer (cam);
+ }
+ //cam->read = FALSE;
+ /* initialize cam and create the window */
+
+ if (cam->read == FALSE) {
+ pt2Function = timeout_func;
+ init_cam (NULL, cam);
+ } else {
+ printf ("using read()\n");
+ cam->pic =
+ realloc (cam->pic,
+ (cam->vid_cap.maxwidth * cam->vid_cap.maxheight * 3));
+ pt2Function = read_timeout_func;
+ }
+ cam->pixmap = gdk_pixmap_new (NULL, cam->x, cam->y, cam->desk_depth);
+
+ filename =
+ gnome_program_locate_file (NULL,
+ GNOME_FILE_DOMAIN_APP_DATADIR,
+ "camorama/camorama.glade", TRUE, NULL);
+ if (filename == NULL) {
+ error_dialog (_
+ ("Couldn't find the main interface file (camorama.glade)."));
+ exit (1);
+ }
+ //pixfilename = gnome_program_locate_file(NULL, GNOME_FILE_DOMAIN_APP_DATADIR, "pixmaps/camorama.png", TRUE, NULL);
+ //printf("pixfile = %s\n",pixfilename);
+ //pixfilename);
+ //printf("pixfile = %s\n",pixfilename);
+ cam->xml = glade_xml_new (filename, NULL, NULL);
+ /*eggtray */
+
+ /*tray_icon = egg_tray_icon_new ("Our other cool tray icon");
+ * button = gtk_button_new_with_label ("This is a another\ncool tray icon");
+ * g_signal_connect (button, "clicked",
+ * G_CALLBACK (second_button_pressed), tray_icon);
+ *
+ * gtk_container_add (GTK_CONTAINER (tray_icon), button);
+ * gtk_widget_show_all (GTK_WIDGET (tray_icon)); */
+ load_interface (cam);
+
+ cam->idle_id = gtk_idle_add ((GSourceFunc) pt2Function, (gpointer) cam);
+
+ gtk_timeout_add (2000, (GSourceFunc) fps, cam->status);
+ gdk_threads_enter ();
+ gtk_main ();
+ gdk_threads_leave ();
+ return 0;
+}
diff --git a/src/support.c b/src/support.c
new file mode 100644
index 0000000..0d75b90
--- /dev/null
+++ b/src/support.c
@@ -0,0 +1,92 @@
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <string.h>
+
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtk.h>
+#include <gnome.h>
+#include "callbacks.h"
+#include "interface.h"
+#include "support.h"
+#include <config.h>
+
+GtkWidget *xpm_label_box (gchar * xpm_filename)
+{
+ GtkWidget *box;
+ GtkWidget *image;
+
+ /* Create box for image and label */
+ box = gtk_hbox_new (FALSE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (box), 2);
+
+ /* Now on to the image stuff */
+ image = gtk_image_new_from_file (xpm_filename);
+
+ /* Create a label for the button */
+
+ /* Pack the image and label into the box */
+ gtk_box_pack_start (GTK_BOX (box), image, FALSE, FALSE, 3);
+
+ gtk_widget_show (image);
+
+ return box;
+}
+GtkWidget *lookup_widget (GtkWidget * widget, const gchar * widget_name)
+{
+ GtkWidget *parent, *found_widget;
+
+ for (;;) {
+ if (GTK_IS_MENU (widget))
+ parent = gtk_menu_get_attach_widget (GTK_MENU (widget));
+ else
+ parent = widget->parent;
+ if (parent == NULL)
+ break;
+ widget = parent;
+ }
+
+ found_widget =
+ (GtkWidget *) gtk_object_get_data (GTK_OBJECT (widget), widget_name);
+ if (!found_widget)
+ g_warning ("Widget not found: %s", widget_name);
+ return found_widget;
+}
+GdkPixbuf *create_pixbuf (const gchar * filename)
+{
+ gchar *pathname = NULL;
+ GdkPixbuf *pixbuf;
+ GError *error = NULL;
+
+ if (!filename || !filename[0])
+ return NULL;
+
+ pathname =
+ gnome_program_locate_file (NULL, GNOME_FILE_DOMAIN_APP_PIXMAP,
+ filename, TRUE, NULL);
+
+ if (!pathname) {
+ g_warning (_("Couldn't find pixmap file: %s"), filename);
+ return NULL;
+ }
+ pixbuf = gdk_pixbuf_new_from_file (pathname, &error);
+ if (!pixbuf) {
+ fprintf (stderr, "Failed to load pixbuf file: %s: %s\n", pathname,
+ error->message);
+ g_error_free (error);
+ }
+ g_free (pathname);
+ return pixbuf;
+}
+
+int error_dialog (char *message)
+{
+ GtkWidget *dialog;
+ int test;
+
+ dialog =
+ gnome_message_box_new (message, GNOME_MESSAGE_BOX_ERROR,
+ GNOME_STOCK_BUTTON_CLOSE, NULL);
+ test = gnome_dialog_run (GNOME_DIALOG (dialog));
+ return test;
+}
diff --git a/src/support.h b/src/support.h
new file mode 100644
index 0000000..82b0401
--- /dev/null
+++ b/src/support.h
@@ -0,0 +1,3 @@
+GtkWidget *xpm_label_box (gchar *);
+int error_dialog (char *);
+GdkPixbuf *create_pixbuf (const gchar * filename);
diff --git a/src/v4l.c b/src/v4l.c
new file mode 100644
index 0000000..f337e02
--- /dev/null
+++ b/src/v4l.c
@@ -0,0 +1,252 @@
+#include"v4l.h"
+#include<time.h>
+#include<errno.h>
+#include<gnome.h>
+#include "support.h"
+
+extern int frame_number;
+extern int errno;
+
+void print_cam(cam *cam){
+ printf("\nCamera Info\n");
+ printf("-------------\n");
+ printf("device = %s, x = %d, y = %d\n",cam->video_dev, cam->x,cam->y);
+ printf("depth = %d, desk_depth = %d, size = %d\n",cam->depth,cam->desk_depth,cam->size);
+ printf("capture directory = %s, capture file = %s\n",cam->pixdir, cam->capturefile);
+ printf("remote capture directory = %s, remote capture file = %s\n",cam->rpixdir, cam->rcapturefile);
+ printf("remote host = %s, remote login = %s\n",cam->rhost,cam->rlogin);
+ printf("timestamp = %s\n\n",cam->ts_string);
+
+}
+void print_palette(int p)
+{
+
+ switch (p) {
+ case VIDEO_PALETTE_HI240:
+ printf("High 240 cube (BT848)\n");
+ break;
+
+ case VIDEO_PALETTE_RGB565:
+ printf("565 16 bit RGB\n");
+ break;
+
+ case VIDEO_PALETTE_RGB24:
+ printf("24bit RGB\n");
+ break;
+
+ case VIDEO_PALETTE_RGB32:
+ printf("32bit RGB\n");
+ break;
+
+ case VIDEO_PALETTE_RGB555:
+ printf("555 15bit RGB\n");
+ break;
+
+ case VIDEO_PALETTE_YUV422:
+ printf("YUV422 capture");
+ break;
+
+ case VIDEO_PALETTE_YUYV:
+ printf("YUYV\n");
+ break;
+
+ case VIDEO_PALETTE_UYVY:
+ printf("UYVY\n");
+ break;
+
+ case VIDEO_PALETTE_YUV420:
+ printf("YUV420\n");
+ break;
+
+ case VIDEO_PALETTE_YUV411:
+ printf("YUV411 capture\n");
+ break;
+
+ case VIDEO_PALETTE_RAW:
+ printf("RAW capture (BT848)\n");
+ break;
+
+ case VIDEO_PALETTE_YUV422P:
+ printf("YUV 4:2:2 Planar");
+ break;
+
+ case VIDEO_PALETTE_YUV411P:
+ printf("YUV 4:1:1 Planar\n");
+ break;
+
+ case VIDEO_PALETTE_YUV420P:
+ printf("YUV 4:2:0 Planar\n");
+ break;
+
+ case VIDEO_PALETTE_YUV410P:
+ printf("YUV 4:1:0 Planar\n");
+ break;
+ }
+}
+
+void camera_cap(cam * cam)
+{
+ char *msg;
+ if(ioctl(cam->dev, VIDIOCGCAP, &cam->vid_cap) == -1) {
+ if(cam->debug == TRUE) {
+ fprintf(stderr, "VIDIOCGCAP -- could not get camera capabilities, exiting.....\n");
+ }
+ msg = g_strdup_printf(_("Could not connect to video device (%s).\nPlease check connection."), cam->video_dev);
+ error_dialog(msg);
+ g_free(msg);
+ exit(0);
+ }
+ if(cam->x > 0 && cam->y > 0) {
+ if(cam->vid_cap.maxwidth < cam->x) {
+ cam->x = cam->vid_cap.maxwidth;
+ }
+ if(cam->vid_cap.minwidth > cam->x) {
+ cam->x = cam->vid_cap.minwidth;
+ }
+ if(cam->vid_cap.maxheight < cam->y) {
+ cam->y = cam->vid_cap.maxheight;
+ }
+ if(cam->vid_cap.minheight > cam->y) {
+ cam->y = cam->vid_cap.minheight;
+ }
+ } else {
+ switch (cam->size) {
+ case PICMAX:
+ cam->x = cam->vid_cap.maxwidth;
+ cam->y = cam->vid_cap.maxheight;
+ break;
+
+ case PICMIN:
+ cam->x = cam->vid_cap.minwidth;
+ cam->y = cam->vid_cap.minheight;
+ break;
+
+ case PICHALF:
+ cam->x = cam->vid_cap.maxwidth / 2;
+ cam->y = cam->vid_cap.maxheight / 2;
+ break;
+
+ default:
+ cam->x = cam->vid_cap.maxwidth / 2;
+ cam->y = cam->vid_cap.maxheight / 2;
+ break;
+ }
+ }
+ if((cam->vid_cap.type & VID_TYPE_CAPTURE) != 1) {
+ cam->read = TRUE;
+ }
+
+ if(cam->debug == TRUE) {
+ printf("\nVIDIOCGCAP\n");
+ printf("device name = %s\n", cam->vid_cap.name);
+ printf("device type = %d\n", cam->vid_cap.type);
+ if(cam->read == FALSE){
+ printf("can use mmap()\n");
+ }
+ printf("# of channels = %d\n", cam->vid_cap.channels);
+ printf("# of audio devices = %d\n", cam->vid_cap.audios);
+ printf("max width = %d\n", cam->vid_cap.maxwidth);
+ printf("max height = %d\n", cam->vid_cap.maxheight);
+ printf("min width = %d\n", cam->vid_cap.minwidth);
+ printf("min height = %d\n", cam->vid_cap.minheight);
+ }
+}
+void set_pic_info(cam * cam)
+{
+ char *msg;
+ if(ioctl(cam->dev, VIDIOCSPICT, &cam->vid_pic) == -1) {
+ if(cam->debug == TRUE) {
+ fprintf(stderr, "VIDIOCSPICT -- could not set picture info, exiting....\n");
+ }
+ msg = g_strdup_printf(_("Could not connect to video device (%s).\nPlease check connection."), cam->video_dev);
+ error_dialog(msg);
+ g_free(msg);
+ exit(0);
+ }
+
+}
+
+void get_pic_info(cam * cam)
+{
+ char *msg;
+
+ if(ioctl(cam->dev, VIDIOCGPICT, &cam->vid_pic) == -1) {
+ msg = g_strdup_printf(_("Could not connect to video device (%s).\nPlease check connection."), cam->video_dev);
+ error_dialog(msg);
+ if(cam->debug == TRUE) {
+ fprintf(stderr, "VIDIOCGPICT -- could not get picture info, exiting....\n");
+ }
+ g_free(msg);
+ exit(0);
+ }
+
+ if(cam->debug == TRUE) {
+ printf("\nVIDIOCGPICT:\n");
+ printf("bright = %d\n", cam->vid_pic.brightness);
+ printf("hue = %d\n", cam->vid_pic.hue);
+ printf("colour = %d\n", cam->vid_pic.colour);
+ printf("contrast = %d\n", cam->vid_pic.contrast);
+ printf("whiteness = %d\n", cam->vid_pic.whiteness);
+ printf("colour depth = %d\n", cam->vid_pic.depth);
+ print_palette(cam->vid_pic.palette);
+ }
+}
+
+void get_win_info(cam * cam)
+{
+ gchar *msg;
+ if(ioctl(cam->dev, VIDIOCGWIN, &cam->vid_win) == -1) {
+ msg = g_strdup_printf(_("Could not connect to video device (%s).\nPlease check connection."), cam->video_dev);
+ error_dialog(msg);
+ if(cam->debug == TRUE) {
+ fprintf(stderr, "VIDIOCGWIN -- could not get window info, exiting....\n");
+ }
+ exit(0);
+ }
+ if(cam->debug == TRUE) {
+ printf("\nVIDIOCGWIN\n");
+ printf("x = %d\n", cam->vid_win.x);
+ printf("y = %d\n", cam->vid_win.y);
+ printf("width = %d\n", cam->vid_win.width);
+ printf("height = %d\n", cam->vid_win.height);
+ printf("chromakey = %d\n", cam->vid_win.chromakey);
+ printf("flags = %d\n", cam->vid_win.flags);
+ }
+}
+void set_win_info(cam * cam)
+{
+ gchar *msg;
+ if(ioctl(cam->dev, VIDIOCSWIN, &cam->vid_win) == -1) {
+ msg = g_strdup_printf(_("Could not connect to video device (%s).\nPlease check connection."), cam->video_dev);
+ error_dialog(msg);
+ if(cam->debug == TRUE) {
+ fprintf(stderr, "VIDIOCSWIN -- could not set window info, exiting....\nerrno = %d", errno);
+ }
+ g_free(msg);
+ exit(0);
+ }
+
+}
+
+void set_buffer(cam * cam)
+{
+ char *msg;
+ if(ioctl(cam->dev, VIDIOCGMBUF, &cam->vid_buf) == -1) {
+ msg = g_strdup_printf(_("Could not connect to video device (%s).\nPlease check connection."), cam->video_dev);
+ error_dialog(msg);
+ if(cam->debug == TRUE) {
+ fprintf(stderr, "VIDIOCGMBF -- could not set buffer info, exiting...\n");
+ }
+ g_free(msg);
+ exit(0);
+
+ }
+
+ if(cam->debug == TRUE) {
+ printf("\nVIDIOCGMBUF\n");
+ printf("mb.size = %d\n", cam->vid_buf.size);
+ printf("mb.frames = %d\n", cam->vid_buf.frames);
+ printf("mb.offset = %d\n", cam->vid_buf.offsets[1]);
+ }
+
+}
diff --git a/src/v4l.h b/src/v4l.h
new file mode 100644
index 0000000..5b8ff10
--- /dev/null
+++ b/src/v4l.h
@@ -0,0 +1,71 @@
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <sys/mman.h>
+#include <fcntl.h>
+#include <gtk/gtk.h>
+#include <linux/types.h>
+#include <linux/videodev.h>
+#include <signal.h>
+#include <png.h>
+#include <glade/glade.h>
+#include <gconf/gconf-client.h>
+#include "eggtrayicon.h"
+
+#define PICMAX 0
+#define PICMIN 1
+#define PICHALF 2
+#define JPEG 0
+#define PNG 1
+#define PPM 2
+
+typedef struct camera {
+ int dev;
+ int x;
+ int y;
+ int depth;
+ int desk_depth;
+ int size;
+ int dither;
+ int contrast, brightness, colour, hue, wb;
+ int frame_number;
+ struct video_capability vid_cap;
+ struct video_picture vid_pic;
+ struct video_window vid_win;
+ struct video_mbuf vid_buf;
+ struct video_mmap vid_map;
+ char *video_dev;
+ unsigned char *pic;
+ unsigned char *image;
+ gchar *capturefile, *rcapturefile;
+ gchar *pixdir, *rpixdir;
+ int savetype, rsavetype;
+ gchar *rhost, *rlogin, *rpw;
+ gchar *ts_string;
+ gchar *date_format;
+ gboolean debug, read, hidden;
+ gboolean cap, rcap, acap, show_adjustments;
+ gboolean timestamp, rtimestamp, usedate, usestring;
+ gboolean rtimefn, timefn;
+ GdkPixmap *pixmap;
+ GdkWindow *window;
+ GtkWidget *da, *tooltips, *tray_tooltip, *status;
+ unsigned char *pic_buf, *tmp;
+ guint timeout_id, idle_id;
+ guint32 timeout_interval;
+ GConfClient *gc;
+ GladeXML *xml;
+ EggTrayIcon *tray_icon;
+} cam;
+
+void camera_cap (cam *);
+void set_win_info (cam * cam);
+void get_pic_info (cam *);
+void set_pic_info (cam *);
+void get_win_info (cam *);
+void set_buffer (cam *);

Privacy Policy