summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2005-11-27 20:48:30 +0000
committermartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2005-11-27 20:48:30 +0000
commitafbd73263d694392402558d15a48653f593a1a47 (patch)
treef776c0225ff1baa5ca354d77f38ad8d0a88ffa21
downloadnavit-svn-navit.tar.gz
Initial Importnavit
git-svn-id: http://svn.code.sf.net/p/navit/code/branches/navit/navit@4 ffa7fe5e-494d-0410-b361-a75ebd5db220
-rw-r--r--.depend2649
-rw-r--r--Makefile36
-rw-r--r--block.c209
-rw-r--r--block.h30
-rw-r--r--command.c143
-rw-r--r--command.h1
-rw-r--r--compass.c122
-rw-r--r--compass.h2
-rw-r--r--container.h69
-rw-r--r--coord.c9
-rw-r--r--coord.h21
-rw-r--r--country.c94
-rw-r--r--country.h12
-rw-r--r--cursor.c196
-rw-r--r--cursor.h5
-rw-r--r--data.h39
-rw-r--r--data_window.c104
-rw-r--r--data_window.h8
-rw-r--r--data_window_int.h7
-rw-r--r--destination.c622
-rw-r--r--destination.h11
-rw-r--r--display.c266
-rw-r--r--display.h24
-rw-r--r--draw_info.h5
-rw-r--r--file.c124
-rw-r--r--file.h18
-rwxr-xr-xget_map5
-rwxr-xr-xgps_emu19
-rwxr-xr-xgps_emu240
-rwxr-xr-xgps_emu312
-rw-r--r--graphics.c401
-rw-r--r--graphics.h48
-rw-r--r--gtkext.h1
-rw-r--r--locations.txt1
-rw-r--r--log.c88
-rw-r--r--log.h2
-rw-r--r--main.c80
-rw-r--r--main.h1
-rw-r--r--map-common.c442
-rw-r--r--map-share.h2
-rw-r--r--map-skelimpl.c286
-rw-r--r--map-skels.c184
-rw-r--r--map-srv.c262
-rw-r--r--map-stubs.c135
-rw-r--r--map.h341
-rw-r--r--map.idl25
-rw-r--r--map.ior1
-rw-r--r--map_data.c112
-rw-r--r--map_data.h30
-rw-r--r--mapclient.c103
-rw-r--r--menu.c35
-rw-r--r--menu.h8
-rw-r--r--navigation.c249
-rw-r--r--navigation.h1
-rw-r--r--out1
-rw-r--r--outtbin0 -> 1233 bytes
-rw-r--r--param.c46
-rw-r--r--param.h9
-rw-r--r--phrase.c25
-rw-r--r--phrase.h2
-rw-r--r--plugin.c21
-rw-r--r--plugin.h56
-rw-r--r--point.h9
-rw-r--r--poly.c109
-rw-r--r--poly.h13
-rw-r--r--popup.c306
-rw-r--r--popup.h22
-rw-r--r--profile.c18
-rw-r--r--route.c1053
-rw-r--r--route.h48
-rw-r--r--search.c442
-rw-r--r--search.h30
-rw-r--r--speech.c61
-rw-r--r--speech.h5
-rw-r--r--statusbar.h10
-rw-r--r--street.c455
-rw-r--r--street.h53
-rw-r--r--street_data.h60
-rw-r--r--street_name.c260
-rw-r--r--street_name.h51
-rw-r--r--toolbar.h3
-rw-r--r--town.c260
-rw-r--r--town.h27
-rw-r--r--transform.c363
-rw-r--r--transform.h37
-rw-r--r--tree.c320
-rw-r--r--tree.h13
-rw-r--r--tst.c15
-rw-r--r--util.c18
-rw-r--r--util.h4
-rw-r--r--vehicle.c216
-rw-r--r--vehicle.h6
92 files changed, 12187 insertions, 0 deletions
diff --git a/.depend b/.depend
new file mode 100644
index 00000000..da4dac12
--- /dev/null
+++ b/.depend
@@ -0,0 +1,2649 @@
+# DO NOT DELETE
+
+block.o: /usr/include/stdio.h /usr/include/features.h
+block.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+block.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+block.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+block.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+block.o: /usr/include/_G_config.h /usr/include/wchar.h
+block.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+block.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+block.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+block.o: /usr/include/string.h /usr/include/malloc.h /usr/include/assert.h
+block.o: file.h param.h block.h coord.h transform.h point.h data.h
+command.o: /usr/include/stdio.h /usr/include/features.h
+command.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+command.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+command.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+command.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+command.o: /usr/include/_G_config.h /usr/include/wchar.h
+command.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+command.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+command.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+command.o: /usr/include/string.h coord.h town.h street.h
+compass.o: /usr/include/math.h /usr/include/features.h
+compass.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+compass.o: /usr/include/bits/huge_val.h /usr/include/bits/mathdef.h
+compass.o: /usr/include/bits/mathcalls.h /usr/include/stdio.h
+compass.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+compass.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+compass.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+compass.o: /usr/include/_G_config.h /usr/include/wchar.h
+compass.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+compass.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+compass.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+compass.o: /opt/gnome/include/glib-2.0/glib.h
+compass.o: /opt/gnome/include/glib-2.0/glib/galloca.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gtypes.h
+compass.o: /opt/gnome/lib/glib-2.0/include/glibconfig.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gmacros.h /usr/include/limits.h
+compass.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/limits.h
+compass.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/float.h
+compass.o: /opt/gnome/include/glib-2.0/glib/garray.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gasyncqueue.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gthread.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gerror.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gquark.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gbacktrace.h
+compass.o: /usr/include/signal.h /usr/include/bits/sigset.h
+compass.o: /usr/include/bits/signum.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gcache.h
+compass.o: /opt/gnome/include/glib-2.0/glib/glist.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gmem.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gcompletion.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gconvert.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gdataset.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gdate.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gdir.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gfileutils.h
+compass.o: /opt/gnome/include/glib-2.0/glib/ghash.h
+compass.o: /opt/gnome/include/glib-2.0/glib/ghook.h
+compass.o: /opt/gnome/include/glib-2.0/glib/giochannel.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gmain.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gslist.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gstring.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gunicode.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gmarkup.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gmessages.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gnode.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gpattern.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gprimes.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gqsort.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gqueue.h
+compass.o: /opt/gnome/include/glib-2.0/glib/grand.h
+compass.o: /opt/gnome/include/glib-2.0/glib/grel.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gscanner.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gshell.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gspawn.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gstrfuncs.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gthreadpool.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gtimer.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gtree.h
+compass.o: /opt/gnome/include/glib-2.0/glib/gutils.h point.h coord.h
+compass.o: graphics.h transform.h route.h vehicle.h container.h
+coord.o: coord.h
+country.o: /usr/include/string.h /usr/include/features.h
+country.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+country.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+country.o: /usr/include/stdio.h /usr/include/bits/types.h
+country.o: /usr/include/bits/wordsize.h /usr/include/bits/typesizes.h
+country.o: /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h
+country.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+country.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+country.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+country.o: /opt/gnome/include/glib-2.0/glib.h
+country.o: /opt/gnome/include/glib-2.0/glib/galloca.h
+country.o: /opt/gnome/include/glib-2.0/glib/gtypes.h
+country.o: /opt/gnome/lib/glib-2.0/include/glibconfig.h
+country.o: /opt/gnome/include/glib-2.0/glib/gmacros.h /usr/include/limits.h
+country.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/limits.h
+country.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/float.h
+country.o: /opt/gnome/include/glib-2.0/glib/garray.h
+country.o: /opt/gnome/include/glib-2.0/glib/gasyncqueue.h
+country.o: /opt/gnome/include/glib-2.0/glib/gthread.h
+country.o: /opt/gnome/include/glib-2.0/glib/gerror.h
+country.o: /opt/gnome/include/glib-2.0/glib/gquark.h
+country.o: /opt/gnome/include/glib-2.0/glib/gbacktrace.h
+country.o: /usr/include/signal.h /usr/include/bits/sigset.h
+country.o: /usr/include/bits/signum.h
+country.o: /opt/gnome/include/glib-2.0/glib/gcache.h
+country.o: /opt/gnome/include/glib-2.0/glib/glist.h
+country.o: /opt/gnome/include/glib-2.0/glib/gmem.h
+country.o: /opt/gnome/include/glib-2.0/glib/gcompletion.h
+country.o: /opt/gnome/include/glib-2.0/glib/gconvert.h
+country.o: /opt/gnome/include/glib-2.0/glib/gdataset.h
+country.o: /opt/gnome/include/glib-2.0/glib/gdate.h
+country.o: /opt/gnome/include/glib-2.0/glib/gdir.h
+country.o: /opt/gnome/include/glib-2.0/glib/gfileutils.h
+country.o: /opt/gnome/include/glib-2.0/glib/ghash.h
+country.o: /opt/gnome/include/glib-2.0/glib/ghook.h
+country.o: /opt/gnome/include/glib-2.0/glib/giochannel.h
+country.o: /opt/gnome/include/glib-2.0/glib/gmain.h
+country.o: /opt/gnome/include/glib-2.0/glib/gslist.h
+country.o: /opt/gnome/include/glib-2.0/glib/gstring.h
+country.o: /opt/gnome/include/glib-2.0/glib/gunicode.h
+country.o: /opt/gnome/include/glib-2.0/glib/gmarkup.h
+country.o: /opt/gnome/include/glib-2.0/glib/gmessages.h
+country.o: /opt/gnome/include/glib-2.0/glib/gnode.h
+country.o: /opt/gnome/include/glib-2.0/glib/gpattern.h
+country.o: /opt/gnome/include/glib-2.0/glib/gprimes.h
+country.o: /opt/gnome/include/glib-2.0/glib/gqsort.h
+country.o: /opt/gnome/include/glib-2.0/glib/gqueue.h
+country.o: /opt/gnome/include/glib-2.0/glib/grand.h
+country.o: /opt/gnome/include/glib-2.0/glib/grel.h
+country.o: /opt/gnome/include/glib-2.0/glib/gscanner.h
+country.o: /opt/gnome/include/glib-2.0/glib/gshell.h
+country.o: /opt/gnome/include/glib-2.0/glib/gspawn.h
+country.o: /opt/gnome/include/glib-2.0/glib/gstrfuncs.h
+country.o: /opt/gnome/include/glib-2.0/glib/gthreadpool.h
+country.o: /opt/gnome/include/glib-2.0/glib/gtimer.h
+country.o: /opt/gnome/include/glib-2.0/glib/gtree.h
+country.o: /opt/gnome/include/glib-2.0/glib/gutils.h country.h
+cursor.o: /usr/include/stdio.h /usr/include/features.h
+cursor.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+cursor.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+cursor.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+cursor.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+cursor.o: /usr/include/_G_config.h /usr/include/wchar.h
+cursor.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+cursor.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+cursor.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+cursor.o: /usr/include/stdlib.h /usr/include/string.h /usr/include/unistd.h
+cursor.o: /usr/include/bits/posix_opt.h /usr/include/bits/confname.h
+cursor.o: /usr/include/fcntl.h /usr/include/bits/fcntl.h
+cursor.o: /usr/include/sys/types.h /usr/include/time.h /usr/include/math.h
+cursor.o: /usr/include/bits/huge_val.h /usr/include/bits/mathdef.h
+cursor.o: /usr/include/bits/mathcalls.h /opt/gnome/include/glib-2.0/glib.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/galloca.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gtypes.h
+cursor.o: /opt/gnome/lib/glib-2.0/include/glibconfig.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gmacros.h /usr/include/limits.h
+cursor.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/limits.h
+cursor.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/float.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/garray.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gasyncqueue.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gthread.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gerror.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gquark.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gbacktrace.h /usr/include/signal.h
+cursor.o: /usr/include/bits/sigset.h /usr/include/bits/signum.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gcache.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/glist.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gmem.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gcompletion.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gconvert.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gdataset.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gdate.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gdir.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gfileutils.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/ghash.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/ghook.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/giochannel.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gmain.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gslist.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gstring.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gunicode.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gmarkup.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gmessages.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gnode.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gpattern.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gprimes.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gqsort.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gqueue.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/grand.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/grel.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gscanner.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gshell.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gspawn.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gstrfuncs.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gthreadpool.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gtimer.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gtree.h
+cursor.o: /opt/gnome/include/glib-2.0/glib/gutils.h coord.h transform.h
+cursor.o: point.h graphics.h statusbar.h menu.h vehicle.h container.h route.h
+data_window.o: /usr/include/malloc.h
+data_window.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+data_window.o: /usr/include/stdio.h /usr/include/features.h
+data_window.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+data_window.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+data_window.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+data_window.o: /usr/include/_G_config.h /usr/include/wchar.h
+data_window.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+data_window.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+data_window.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtk.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk/gdk.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk/gdkcolor.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk/gdktypes.h
+data_window.o: /opt/gnome/include/glib-2.0/glib.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/galloca.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gtypes.h
+data_window.o: /opt/gnome/lib/glib-2.0/include/glibconfig.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gmacros.h
+data_window.o: /usr/include/limits.h
+data_window.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/limits.h
+data_window.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/float.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/garray.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gasyncqueue.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gthread.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gerror.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gquark.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gbacktrace.h
+data_window.o: /usr/include/signal.h /usr/include/bits/sigset.h
+data_window.o: /usr/include/bits/signum.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gcache.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/glist.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gmem.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gcompletion.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gconvert.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gdataset.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gdate.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gdir.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gfileutils.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/ghash.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/ghook.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/giochannel.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gmain.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gslist.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gstring.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gunicode.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gmarkup.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gmessages.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gnode.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gpattern.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gprimes.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gqsort.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gqueue.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/grand.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/grel.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gscanner.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gshell.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gspawn.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gstrfuncs.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gthreadpool.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gtimer.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gtree.h
+data_window.o: /opt/gnome/include/glib-2.0/glib/gutils.h
+data_window.o: /opt/gnome/include/pango-1.0/pango/pango.h
+data_window.o: /opt/gnome/include/pango-1.0/pango/pango-attributes.h
+data_window.o: /opt/gnome/include/pango-1.0/pango/pango-font.h
+data_window.o: /opt/gnome/include/pango-1.0/pango/pango-coverage.h
+data_window.o: /opt/gnome/include/pango-1.0/pango/pango-types.h
+data_window.o: /opt/gnome/include/glib-2.0/glib-object.h
+data_window.o: /opt/gnome/include/glib-2.0/gobject/gboxed.h
+data_window.o: /opt/gnome/include/glib-2.0/gobject/gtype.h
+data_window.o: /opt/gnome/include/glib-2.0/gobject/genums.h
+data_window.o: /opt/gnome/include/glib-2.0/gobject/gobject.h
+data_window.o: /opt/gnome/include/glib-2.0/gobject/gvalue.h
+data_window.o: /opt/gnome/include/glib-2.0/gobject/gparam.h
+data_window.o: /opt/gnome/include/glib-2.0/gobject/gclosure.h
+data_window.o: /opt/gnome/include/glib-2.0/gobject/gsignal.h
+data_window.o: /opt/gnome/include/glib-2.0/gobject/gmarshal.h
+data_window.o: /opt/gnome/include/glib-2.0/gobject/gparamspecs.h
+data_window.o: /opt/gnome/include/glib-2.0/gobject/gsourceclosure.h
+data_window.o: /opt/gnome/include/glib-2.0/gobject/gtypemodule.h
+data_window.o: /opt/gnome/include/glib-2.0/gobject/gtypeplugin.h
+data_window.o: /opt/gnome/include/glib-2.0/gobject/gvaluearray.h
+data_window.o: /opt/gnome/include/glib-2.0/gobject/gvaluetypes.h
+data_window.o: /opt/gnome/include/pango-1.0/pango/pango-break.h
+data_window.o: /opt/gnome/include/pango-1.0/pango/pango-item.h
+data_window.o: /opt/gnome/include/pango-1.0/pango/pango-context.h
+data_window.o: /opt/gnome/include/pango-1.0/pango/pango-fontmap.h
+data_window.o: /opt/gnome/include/pango-1.0/pango/pango-fontset.h
+data_window.o: /opt/gnome/include/pango-1.0/pango/pango-engine.h
+data_window.o: /opt/gnome/include/pango-1.0/pango/pango-glyph.h
+data_window.o: /opt/gnome/include/pango-1.0/pango/pango-enum-types.h
+data_window.o: /opt/gnome/include/pango-1.0/pango/pango-layout.h
+data_window.o: /opt/gnome/include/pango-1.0/pango/pango-glyph-item.h
+data_window.o: /opt/gnome/include/pango-1.0/pango/pango-tabs.h
+data_window.o: /opt/gnome/lib/gtk-2.0/include/gdkconfig.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk/gdkcursor.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk/gdkdisplay.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk/gdkevents.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk/gdkdnd.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk/gdkinput.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk/gdkdrawable.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk/gdkgc.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk/gdkrgb.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-features.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-loader.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-enum-types.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk/gdkenumtypes.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk/gdkfont.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk/gdkimage.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk/gdkkeys.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk/gdkdisplaymanager.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk/gdkpango.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk/gdkpixbuf.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk/gdkpixmap.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk/gdkproperty.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk/gdkregion.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk/gdkscreen.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk/gdkselection.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk/gdkvisual.h
+data_window.o: /opt/gnome/include/gtk-2.0/gdk/gdkwindow.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkaccelgroup.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkenums.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkaccellabel.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtklabel.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkmisc.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkwidget.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkobject.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtktypeutils.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtktypebuiltins.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkdebug.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkadjustment.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkstyle.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtksettings.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkrc.h
+data_window.o: /opt/gnome/include/atk-1.0/atk/atkobject.h
+data_window.o: /opt/gnome/include/atk-1.0/atk/atkstate.h
+data_window.o: /opt/gnome/include/atk-1.0/atk/atkrelationtype.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkwindow.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkbin.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkcontainer.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkmenu.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkmenushell.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkaccelmap.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkaccessible.h
+data_window.o: /opt/gnome/include/atk-1.0/atk/atk.h
+data_window.o: /opt/gnome/include/atk-1.0/atk/atkaction.h
+data_window.o: /opt/gnome/include/atk-1.0/atk/atkcomponent.h
+data_window.o: /opt/gnome/include/atk-1.0/atk/atkutil.h
+data_window.o: /opt/gnome/include/atk-1.0/atk/atkdocument.h
+data_window.o: /opt/gnome/include/atk-1.0/atk/atkeditabletext.h
+data_window.o: /opt/gnome/include/atk-1.0/atk/atktext.h
+data_window.o: /opt/gnome/include/atk-1.0/atk/atkgobjectaccessible.h
+data_window.o: /opt/gnome/include/atk-1.0/atk/atkhyperlink.h
+data_window.o: /opt/gnome/include/atk-1.0/atk/atkhypertext.h
+data_window.o: /opt/gnome/include/atk-1.0/atk/atkimage.h
+data_window.o: /opt/gnome/include/atk-1.0/atk/atknoopobject.h
+data_window.o: /opt/gnome/include/atk-1.0/atk/atknoopobjectfactory.h
+data_window.o: /opt/gnome/include/atk-1.0/atk/atkobjectfactory.h
+data_window.o: /opt/gnome/include/atk-1.0/atk/atkregistry.h
+data_window.o: /opt/gnome/include/atk-1.0/atk/atkobjectfactory.h
+data_window.o: /opt/gnome/include/atk-1.0/atk/atkrelation.h
+data_window.o: /opt/gnome/include/atk-1.0/atk/atkrelationset.h
+data_window.o: /opt/gnome/include/atk-1.0/atk/atkselection.h
+data_window.o: /opt/gnome/include/atk-1.0/atk/atkstateset.h
+data_window.o: /opt/gnome/include/atk-1.0/atk/atkstreamablecontent.h
+data_window.o: /opt/gnome/include/atk-1.0/atk/atktable.h
+data_window.o: /opt/gnome/include/atk-1.0/atk/atkvalue.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkalignment.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkaspectframe.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkframe.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkarrow.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkbindings.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkbox.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkbbox.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkbutton.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkcalendar.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtksignal.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkmarshal.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkcellrenderer.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkcelleditable.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkcellrenderertext.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkcellrenderertoggle.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkcellrendererpixbuf.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkcheckbutton.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtktogglebutton.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkcheckmenuitem.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkmenuitem.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkitem.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkclipboard.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkselection.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkclist.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkhscrollbar.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkscrollbar.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkrange.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkvscrollbar.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkcolorsel.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkdialog.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkvbox.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkcolorseldialog.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkcombo.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkhbox.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkctree.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkcurve.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkdrawingarea.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkdnd.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkeditable.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkentry.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkimcontext.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkeventbox.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkfilesel.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkfixed.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkfontsel.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkgamma.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkgc.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkhandlebox.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkhbbox.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkhpaned.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkpaned.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkhruler.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkruler.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkhscale.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkscale.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkhseparator.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkseparator.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkiconfactory.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkimage.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkimagemenuitem.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkimcontextsimple.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkimmulticontext.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkinputdialog.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkinvisible.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkitemfactory.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtklayout.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtklist.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtklistitem.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkliststore.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtktreemodel.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtktreesortable.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkmain.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkmenubar.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkmessagedialog.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtknotebook.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkoldeditable.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkoptionmenu.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkpixmap.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkplug.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtksocket.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkpreview.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkprogress.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkprogressbar.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkradiobutton.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkradiomenuitem.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkscrolledwindow.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkviewport.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkseparatormenuitem.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtksizegroup.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkspinbutton.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkstock.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkstatusbar.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtktable.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtktearoffmenuitem.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtktext.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtktextbuffer.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtktexttagtable.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtktexttag.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtktextiter.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtktextchild.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtktextmark.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtktextview.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtktipsquery.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtktoolbar.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtktooltips.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtktree.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtktreednd.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtktreeitem.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtktreemodelsort.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtktreeselection.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtktreeview.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtktreeviewcolumn.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtktreestore.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkvbbox.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkversion.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkvpaned.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkvruler.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkvscale.h
+data_window.o: /opt/gnome/include/gtk-2.0/gtk/gtkvseparator.h param.h
+data_window.o: data_window.h data_window_int.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtk.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk/gdk.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk/gdkcolor.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk/gdktypes.h
+destination.o: /opt/gnome/include/glib-2.0/glib.h
+destination.o: /opt/gnome/include/glib-2.0/glib/galloca.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gtypes.h
+destination.o: /opt/gnome/lib/glib-2.0/include/glibconfig.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gmacros.h
+destination.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+destination.o: /usr/include/limits.h /usr/include/features.h
+destination.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+destination.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/limits.h
+destination.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/float.h
+destination.o: /opt/gnome/include/glib-2.0/glib/garray.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gasyncqueue.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gthread.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gerror.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gquark.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gbacktrace.h
+destination.o: /usr/include/signal.h /usr/include/bits/sigset.h
+destination.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+destination.o: /usr/include/bits/typesizes.h /usr/include/bits/signum.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gcache.h
+destination.o: /opt/gnome/include/glib-2.0/glib/glist.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gmem.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gcompletion.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gconvert.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gdataset.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gdate.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gdir.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gfileutils.h
+destination.o: /opt/gnome/include/glib-2.0/glib/ghash.h
+destination.o: /opt/gnome/include/glib-2.0/glib/ghook.h
+destination.o: /opt/gnome/include/glib-2.0/glib/giochannel.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gmain.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gslist.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gstring.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gunicode.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gmarkup.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gmessages.h
+destination.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gnode.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gpattern.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gprimes.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gqsort.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gqueue.h
+destination.o: /opt/gnome/include/glib-2.0/glib/grand.h
+destination.o: /opt/gnome/include/glib-2.0/glib/grel.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gscanner.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gshell.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gspawn.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gstrfuncs.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gthreadpool.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gtimer.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gtree.h
+destination.o: /opt/gnome/include/glib-2.0/glib/gutils.h
+destination.o: /opt/gnome/include/pango-1.0/pango/pango.h
+destination.o: /opt/gnome/include/pango-1.0/pango/pango-attributes.h
+destination.o: /opt/gnome/include/pango-1.0/pango/pango-font.h
+destination.o: /opt/gnome/include/pango-1.0/pango/pango-coverage.h
+destination.o: /opt/gnome/include/pango-1.0/pango/pango-types.h
+destination.o: /opt/gnome/include/glib-2.0/glib-object.h
+destination.o: /opt/gnome/include/glib-2.0/gobject/gboxed.h
+destination.o: /opt/gnome/include/glib-2.0/gobject/gtype.h
+destination.o: /opt/gnome/include/glib-2.0/gobject/genums.h
+destination.o: /opt/gnome/include/glib-2.0/gobject/gobject.h
+destination.o: /opt/gnome/include/glib-2.0/gobject/gvalue.h
+destination.o: /opt/gnome/include/glib-2.0/gobject/gparam.h
+destination.o: /opt/gnome/include/glib-2.0/gobject/gclosure.h
+destination.o: /opt/gnome/include/glib-2.0/gobject/gsignal.h
+destination.o: /opt/gnome/include/glib-2.0/gobject/gmarshal.h
+destination.o: /opt/gnome/include/glib-2.0/gobject/gparamspecs.h
+destination.o: /opt/gnome/include/glib-2.0/gobject/gsourceclosure.h
+destination.o: /opt/gnome/include/glib-2.0/gobject/gtypemodule.h
+destination.o: /opt/gnome/include/glib-2.0/gobject/gtypeplugin.h
+destination.o: /opt/gnome/include/glib-2.0/gobject/gvaluearray.h
+destination.o: /opt/gnome/include/glib-2.0/gobject/gvaluetypes.h
+destination.o: /opt/gnome/include/pango-1.0/pango/pango-break.h
+destination.o: /opt/gnome/include/pango-1.0/pango/pango-item.h
+destination.o: /opt/gnome/include/pango-1.0/pango/pango-context.h
+destination.o: /opt/gnome/include/pango-1.0/pango/pango-fontmap.h
+destination.o: /opt/gnome/include/pango-1.0/pango/pango-fontset.h
+destination.o: /opt/gnome/include/pango-1.0/pango/pango-engine.h
+destination.o: /opt/gnome/include/pango-1.0/pango/pango-glyph.h
+destination.o: /opt/gnome/include/pango-1.0/pango/pango-enum-types.h
+destination.o: /opt/gnome/include/pango-1.0/pango/pango-layout.h
+destination.o: /opt/gnome/include/pango-1.0/pango/pango-glyph-item.h
+destination.o: /opt/gnome/include/pango-1.0/pango/pango-tabs.h
+destination.o: /opt/gnome/lib/gtk-2.0/include/gdkconfig.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk/gdkcursor.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk/gdkdisplay.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk/gdkevents.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk/gdkdnd.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk/gdkinput.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk/gdkdrawable.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk/gdkgc.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk/gdkrgb.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-features.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-loader.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-enum-types.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk/gdkenumtypes.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk/gdkfont.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk/gdkimage.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk/gdkkeys.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk/gdkdisplaymanager.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk/gdkpango.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk/gdkpixbuf.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk/gdkpixmap.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk/gdkproperty.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk/gdkregion.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk/gdkscreen.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk/gdkselection.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk/gdkvisual.h
+destination.o: /opt/gnome/include/gtk-2.0/gdk/gdkwindow.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkaccelgroup.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkenums.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkaccellabel.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtklabel.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkmisc.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkwidget.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkobject.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtktypeutils.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtktypebuiltins.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkdebug.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkadjustment.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkstyle.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtksettings.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkrc.h
+destination.o: /opt/gnome/include/atk-1.0/atk/atkobject.h
+destination.o: /opt/gnome/include/atk-1.0/atk/atkstate.h
+destination.o: /opt/gnome/include/atk-1.0/atk/atkrelationtype.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkwindow.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkbin.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkcontainer.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkmenu.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkmenushell.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkaccelmap.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkaccessible.h
+destination.o: /opt/gnome/include/atk-1.0/atk/atk.h
+destination.o: /opt/gnome/include/atk-1.0/atk/atkaction.h
+destination.o: /opt/gnome/include/atk-1.0/atk/atkcomponent.h
+destination.o: /opt/gnome/include/atk-1.0/atk/atkutil.h
+destination.o: /opt/gnome/include/atk-1.0/atk/atkdocument.h
+destination.o: /opt/gnome/include/atk-1.0/atk/atkeditabletext.h
+destination.o: /opt/gnome/include/atk-1.0/atk/atktext.h
+destination.o: /opt/gnome/include/atk-1.0/atk/atkgobjectaccessible.h
+destination.o: /opt/gnome/include/atk-1.0/atk/atkhyperlink.h
+destination.o: /opt/gnome/include/atk-1.0/atk/atkhypertext.h
+destination.o: /opt/gnome/include/atk-1.0/atk/atkimage.h
+destination.o: /opt/gnome/include/atk-1.0/atk/atknoopobject.h
+destination.o: /opt/gnome/include/atk-1.0/atk/atknoopobjectfactory.h
+destination.o: /opt/gnome/include/atk-1.0/atk/atkobjectfactory.h
+destination.o: /opt/gnome/include/atk-1.0/atk/atkregistry.h
+destination.o: /opt/gnome/include/atk-1.0/atk/atkobjectfactory.h
+destination.o: /opt/gnome/include/atk-1.0/atk/atkrelation.h
+destination.o: /opt/gnome/include/atk-1.0/atk/atkrelationset.h
+destination.o: /opt/gnome/include/atk-1.0/atk/atkselection.h
+destination.o: /opt/gnome/include/atk-1.0/atk/atkstateset.h
+destination.o: /opt/gnome/include/atk-1.0/atk/atkstreamablecontent.h
+destination.o: /opt/gnome/include/atk-1.0/atk/atktable.h
+destination.o: /opt/gnome/include/atk-1.0/atk/atkvalue.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkalignment.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkaspectframe.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkframe.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkarrow.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkbindings.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkbox.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkbbox.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkbutton.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkcalendar.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtksignal.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkmarshal.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkcellrenderer.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkcelleditable.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkcellrenderertext.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkcellrenderertoggle.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkcellrendererpixbuf.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkcheckbutton.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtktogglebutton.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkcheckmenuitem.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkmenuitem.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkitem.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkclipboard.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkselection.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkclist.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkhscrollbar.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkscrollbar.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkrange.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkvscrollbar.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkcolorsel.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkdialog.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkvbox.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkcolorseldialog.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkcombo.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkhbox.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkctree.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkcurve.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkdrawingarea.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkdnd.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkeditable.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkentry.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkimcontext.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkeventbox.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkfilesel.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkfixed.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkfontsel.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkgamma.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkgc.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkhandlebox.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkhbbox.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkhpaned.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkpaned.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkhruler.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkruler.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkhscale.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkscale.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkhseparator.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkseparator.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkiconfactory.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkimage.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkimagemenuitem.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkimcontextsimple.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkimmulticontext.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkinputdialog.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkinvisible.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkitemfactory.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtklayout.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtklist.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtklistitem.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkliststore.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtktreemodel.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtktreesortable.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkmain.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkmenubar.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkmessagedialog.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtknotebook.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkoldeditable.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkoptionmenu.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkpixmap.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkplug.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtksocket.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkpreview.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkprogress.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkprogressbar.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkradiobutton.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkradiomenuitem.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkscrolledwindow.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkviewport.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkseparatormenuitem.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtksizegroup.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkspinbutton.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkstock.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkstatusbar.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtktable.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtktearoffmenuitem.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtktext.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtktextbuffer.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtktexttagtable.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtktexttag.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtktextiter.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtktextchild.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtktextmark.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtktextview.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtktipsquery.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtktoolbar.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtktooltips.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtktree.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtktreednd.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtktreeitem.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtktreemodelsort.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtktreeselection.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtktreeview.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtktreeviewcolumn.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtktreestore.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkvbbox.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkversion.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkvpaned.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkvruler.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkvscale.h
+destination.o: /opt/gnome/include/gtk-2.0/gtk/gtkvseparator.h coord.h
+destination.o: transform.h point.h block.h data_window.h country.h town.h
+destination.o: street.h street_name.h gui/gtk/gtkeyboard.h cursor.h route.h
+destination.o: statusbar.h /usr/include/unistd.h
+destination.o: /usr/include/bits/posix_opt.h /usr/include/bits/confname.h
+destination.o: destination.h container.h
+display.o: /usr/include/malloc.h
+display.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+display.o: /usr/include/math.h /usr/include/features.h
+display.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+display.o: /usr/include/bits/huge_val.h /usr/include/bits/mathdef.h
+display.o: /usr/include/bits/mathcalls.h display.h point.h graphics.h
+file.o: /usr/include/unistd.h /usr/include/features.h
+file.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+file.o: /usr/include/bits/posix_opt.h /usr/include/bits/types.h
+file.o: /usr/include/bits/wordsize.h
+file.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+file.o: /usr/include/bits/typesizes.h /usr/include/bits/confname.h
+file.o: /usr/include/string.h /usr/include/fcntl.h /usr/include/bits/fcntl.h
+file.o: /usr/include/sys/types.h /usr/include/time.h /usr/include/malloc.h
+file.o: /usr/include/sys/stat.h /usr/include/bits/stat.h
+file.o: /usr/include/sys/mman.h /usr/include/bits/mman.h
+file.o: /usr/include/dirent.h /usr/include/bits/dirent.h /usr/include/stdio.h
+file.o: /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h
+file.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+file.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+file.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+file.o: /opt/gnome/include/glib-2.0/glib.h
+file.o: /opt/gnome/include/glib-2.0/glib/galloca.h
+file.o: /opt/gnome/include/glib-2.0/glib/gtypes.h
+file.o: /opt/gnome/lib/glib-2.0/include/glibconfig.h
+file.o: /opt/gnome/include/glib-2.0/glib/gmacros.h /usr/include/limits.h
+file.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/limits.h
+file.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/float.h
+file.o: /opt/gnome/include/glib-2.0/glib/garray.h
+file.o: /opt/gnome/include/glib-2.0/glib/gasyncqueue.h
+file.o: /opt/gnome/include/glib-2.0/glib/gthread.h
+file.o: /opt/gnome/include/glib-2.0/glib/gerror.h
+file.o: /opt/gnome/include/glib-2.0/glib/gquark.h
+file.o: /opt/gnome/include/glib-2.0/glib/gbacktrace.h /usr/include/signal.h
+file.o: /usr/include/bits/sigset.h /usr/include/bits/signum.h
+file.o: /opt/gnome/include/glib-2.0/glib/gcache.h
+file.o: /opt/gnome/include/glib-2.0/glib/glist.h
+file.o: /opt/gnome/include/glib-2.0/glib/gmem.h
+file.o: /opt/gnome/include/glib-2.0/glib/gcompletion.h
+file.o: /opt/gnome/include/glib-2.0/glib/gconvert.h
+file.o: /opt/gnome/include/glib-2.0/glib/gdataset.h
+file.o: /opt/gnome/include/glib-2.0/glib/gdate.h
+file.o: /opt/gnome/include/glib-2.0/glib/gdir.h
+file.o: /opt/gnome/include/glib-2.0/glib/gfileutils.h
+file.o: /opt/gnome/include/glib-2.0/glib/ghash.h
+file.o: /opt/gnome/include/glib-2.0/glib/ghook.h
+file.o: /opt/gnome/include/glib-2.0/glib/giochannel.h
+file.o: /opt/gnome/include/glib-2.0/glib/gmain.h
+file.o: /opt/gnome/include/glib-2.0/glib/gslist.h
+file.o: /opt/gnome/include/glib-2.0/glib/gstring.h
+file.o: /opt/gnome/include/glib-2.0/glib/gunicode.h
+file.o: /opt/gnome/include/glib-2.0/glib/gmarkup.h
+file.o: /opt/gnome/include/glib-2.0/glib/gmessages.h
+file.o: /opt/gnome/include/glib-2.0/glib/gnode.h
+file.o: /opt/gnome/include/glib-2.0/glib/gpattern.h
+file.o: /opt/gnome/include/glib-2.0/glib/gprimes.h
+file.o: /opt/gnome/include/glib-2.0/glib/gqsort.h
+file.o: /opt/gnome/include/glib-2.0/glib/gqueue.h
+file.o: /opt/gnome/include/glib-2.0/glib/grand.h
+file.o: /opt/gnome/include/glib-2.0/glib/grel.h
+file.o: /opt/gnome/include/glib-2.0/glib/gscanner.h
+file.o: /opt/gnome/include/glib-2.0/glib/gshell.h
+file.o: /opt/gnome/include/glib-2.0/glib/gspawn.h
+file.o: /opt/gnome/include/glib-2.0/glib/gstrfuncs.h
+file.o: /opt/gnome/include/glib-2.0/glib/gthreadpool.h
+file.o: /opt/gnome/include/glib-2.0/glib/gtimer.h
+file.o: /opt/gnome/include/glib-2.0/glib/gtree.h
+file.o: /opt/gnome/include/glib-2.0/glib/gutils.h file.h param.h
+graphics.o: /opt/gnome/include/glib-2.0/glib.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/galloca.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gtypes.h
+graphics.o: /opt/gnome/lib/glib-2.0/include/glibconfig.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gmacros.h
+graphics.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+graphics.o: /usr/include/limits.h /usr/include/features.h
+graphics.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+graphics.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/limits.h
+graphics.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/float.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/garray.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gasyncqueue.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gthread.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gerror.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gquark.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gbacktrace.h
+graphics.o: /usr/include/signal.h /usr/include/bits/sigset.h
+graphics.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+graphics.o: /usr/include/bits/typesizes.h /usr/include/bits/signum.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gcache.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/glist.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gmem.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gcompletion.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gconvert.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gdataset.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gdate.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gdir.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gfileutils.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/ghash.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/ghook.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/giochannel.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gmain.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gslist.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gstring.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gunicode.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gmarkup.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gmessages.h
+graphics.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gnode.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gpattern.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gprimes.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gqsort.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gqueue.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/grand.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/grel.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gscanner.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gshell.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gspawn.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gstrfuncs.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gthreadpool.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gtimer.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gtree.h
+graphics.o: /opt/gnome/include/glib-2.0/glib/gutils.h /usr/include/string.h
+graphics.o: draw_info.h graphics.h map_data.h coord.h param.h block.h
+graphics.o: transform.h point.h poly.h town.h street.h container.h
+log.o: /usr/include/unistd.h /usr/include/features.h /usr/include/sys/cdefs.h
+log.o: /usr/include/gnu/stubs.h /usr/include/bits/posix_opt.h
+log.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+log.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+log.o: /usr/include/bits/typesizes.h /usr/include/bits/confname.h
+log.o: /usr/include/fcntl.h /usr/include/bits/fcntl.h
+log.o: /usr/include/sys/types.h /usr/include/time.h /usr/include/stdio.h
+log.o: /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h
+log.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+log.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+log.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+log.o: /usr/include/string.h /usr/include/stdlib.h file.h param.h map_data.h
+log.o: log.h
+main.o: /usr/include/locale.h /usr/include/features.h
+main.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+main.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+main.o: /usr/include/bits/locale.h /usr/include/stdio.h
+main.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+main.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+main.o: /usr/include/_G_config.h /usr/include/wchar.h
+main.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+main.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+main.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h coord.h
+main.o: vehicle.h cursor.h speech.h route.h map.h
+main.o: /opt/gnome/include/glib-2.0/glib.h
+main.o: /opt/gnome/include/glib-2.0/glib/galloca.h
+main.o: /opt/gnome/include/glib-2.0/glib/gtypes.h
+main.o: /opt/gnome/lib/glib-2.0/include/glibconfig.h
+main.o: /opt/gnome/include/glib-2.0/glib/gmacros.h /usr/include/limits.h
+main.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/limits.h
+main.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/float.h
+main.o: /opt/gnome/include/glib-2.0/glib/garray.h
+main.o: /opt/gnome/include/glib-2.0/glib/gasyncqueue.h
+main.o: /opt/gnome/include/glib-2.0/glib/gthread.h
+main.o: /opt/gnome/include/glib-2.0/glib/gerror.h
+main.o: /opt/gnome/include/glib-2.0/glib/gquark.h
+main.o: /opt/gnome/include/glib-2.0/glib/gbacktrace.h /usr/include/signal.h
+main.o: /usr/include/bits/sigset.h /usr/include/bits/signum.h
+main.o: /opt/gnome/include/glib-2.0/glib/gcache.h
+main.o: /opt/gnome/include/glib-2.0/glib/glist.h
+main.o: /opt/gnome/include/glib-2.0/glib/gmem.h
+main.o: /opt/gnome/include/glib-2.0/glib/gcompletion.h
+main.o: /opt/gnome/include/glib-2.0/glib/gconvert.h
+main.o: /opt/gnome/include/glib-2.0/glib/gdataset.h
+main.o: /opt/gnome/include/glib-2.0/glib/gdate.h
+main.o: /opt/gnome/include/glib-2.0/glib/gdir.h
+main.o: /opt/gnome/include/glib-2.0/glib/gfileutils.h
+main.o: /opt/gnome/include/glib-2.0/glib/ghash.h
+main.o: /opt/gnome/include/glib-2.0/glib/ghook.h
+main.o: /opt/gnome/include/glib-2.0/glib/giochannel.h
+main.o: /opt/gnome/include/glib-2.0/glib/gmain.h
+main.o: /opt/gnome/include/glib-2.0/glib/gslist.h
+main.o: /opt/gnome/include/glib-2.0/glib/gstring.h
+main.o: /opt/gnome/include/glib-2.0/glib/gunicode.h
+main.o: /opt/gnome/include/glib-2.0/glib/gmarkup.h
+main.o: /opt/gnome/include/glib-2.0/glib/gmessages.h
+main.o: /opt/gnome/include/glib-2.0/glib/gnode.h
+main.o: /opt/gnome/include/glib-2.0/glib/gpattern.h
+main.o: /opt/gnome/include/glib-2.0/glib/gprimes.h
+main.o: /opt/gnome/include/glib-2.0/glib/gqsort.h
+main.o: /opt/gnome/include/glib-2.0/glib/gqueue.h
+main.o: /opt/gnome/include/glib-2.0/glib/grand.h
+main.o: /opt/gnome/include/glib-2.0/glib/grel.h
+main.o: /opt/gnome/include/glib-2.0/glib/gscanner.h
+main.o: /opt/gnome/include/glib-2.0/glib/gshell.h
+main.o: /opt/gnome/include/glib-2.0/glib/gspawn.h
+main.o: /opt/gnome/include/glib-2.0/glib/gstrfuncs.h
+main.o: /opt/gnome/include/glib-2.0/glib/gthreadpool.h
+main.o: /opt/gnome/include/glib-2.0/glib/gtimer.h
+main.o: /opt/gnome/include/glib-2.0/glib/gtree.h
+main.o: /opt/gnome/include/glib-2.0/glib/gutils.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orbit-types.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/util/orbit-util.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orbit-config.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/util/basic_types.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/util/orbit-genrand.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orb-core-types.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orb-types.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-typecode-type.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-any-type.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-pobj.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-environment-type.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-orb-type.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orbit-object.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-context-type.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-typecode.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/allocators.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-defs.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa-basics.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orbit-interface.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orbit.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orb-core.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/iop-defs.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-orb.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-string.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-environment.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-any.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-object-type.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-object.h
+main.o: /opt/gnome/include/glib-2.0/glib-object.h
+main.o: /opt/gnome/include/glib-2.0/gobject/gboxed.h
+main.o: /opt/gnome/include/glib-2.0/gobject/gtype.h
+main.o: /opt/gnome/include/glib-2.0/gobject/genums.h
+main.o: /opt/gnome/include/glib-2.0/gobject/gobject.h
+main.o: /opt/gnome/include/glib-2.0/gobject/gvalue.h
+main.o: /opt/gnome/include/glib-2.0/gobject/gparam.h
+main.o: /opt/gnome/include/glib-2.0/gobject/gclosure.h
+main.o: /opt/gnome/include/glib-2.0/gobject/gsignal.h
+main.o: /opt/gnome/include/glib-2.0/gobject/gmarshal.h
+main.o: /opt/gnome/include/glib-2.0/gobject/gparamspecs.h
+main.o: /opt/gnome/include/glib-2.0/gobject/gsourceclosure.h
+main.o: /opt/gnome/include/glib-2.0/gobject/gtypemodule.h
+main.o: /opt/gnome/include/glib-2.0/gobject/gtypeplugin.h
+main.o: /opt/gnome/include/glib-2.0/gobject/gvaluearray.h
+main.o: /opt/gnome/include/glib-2.0/gobject/gvaluetypes.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-policy-type.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-context.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orbit-small.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa-defs.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa-types.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/poa/orbit-adaptor.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/poa/portableserver-poa-type.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/poa/portableserver-current-type.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/dynamic/dynamic.h
+main.o: /opt/gnome/include/orbit-2.0/orbit/dynamic/dynamic-defs.h map_data.h
+main.o: transform.h point.h popup.h plugin.h compass.h container.h
+map-common.o: /usr/include/string.h /usr/include/features.h
+map-common.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+map-common.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h map.h
+map-common.o: /opt/gnome/include/glib-2.0/glib.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/galloca.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gtypes.h
+map-common.o: /opt/gnome/lib/glib-2.0/include/glibconfig.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gmacros.h
+map-common.o: /usr/include/limits.h
+map-common.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/limits.h
+map-common.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/float.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/garray.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gasyncqueue.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gthread.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gerror.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gquark.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gbacktrace.h
+map-common.o: /usr/include/signal.h /usr/include/bits/sigset.h
+map-common.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+map-common.o: /usr/include/bits/typesizes.h /usr/include/bits/signum.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gcache.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/glist.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gmem.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gcompletion.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gconvert.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gdataset.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gdate.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gdir.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gfileutils.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/ghash.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/ghook.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/giochannel.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gmain.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gslist.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gstring.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gunicode.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gmarkup.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gmessages.h
+map-common.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gnode.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gpattern.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gprimes.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gqsort.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gqueue.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/grand.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/grel.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gscanner.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gshell.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gspawn.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gstrfuncs.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gthreadpool.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gtimer.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gtree.h
+map-common.o: /opt/gnome/include/glib-2.0/glib/gutils.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orbit-types.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/util/orbit-util.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orbit-config.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/util/basic_types.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/util/orbit-genrand.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orb-core-types.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orb-types.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-typecode-type.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-any-type.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-pobj.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-environment-type.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-orb-type.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orbit-object.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-context-type.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-typecode.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/allocators.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-defs.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa-basics.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orbit-interface.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orbit.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orb-core.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/iop-defs.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-orb.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-string.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-environment.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-any.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-object-type.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-object.h
+map-common.o: /opt/gnome/include/glib-2.0/glib-object.h
+map-common.o: /opt/gnome/include/glib-2.0/gobject/gboxed.h
+map-common.o: /opt/gnome/include/glib-2.0/gobject/gtype.h
+map-common.o: /opt/gnome/include/glib-2.0/gobject/genums.h
+map-common.o: /opt/gnome/include/glib-2.0/gobject/gobject.h
+map-common.o: /opt/gnome/include/glib-2.0/gobject/gvalue.h
+map-common.o: /opt/gnome/include/glib-2.0/gobject/gparam.h
+map-common.o: /opt/gnome/include/glib-2.0/gobject/gclosure.h
+map-common.o: /opt/gnome/include/glib-2.0/gobject/gsignal.h
+map-common.o: /opt/gnome/include/glib-2.0/gobject/gmarshal.h
+map-common.o: /opt/gnome/include/glib-2.0/gobject/gparamspecs.h
+map-common.o: /opt/gnome/include/glib-2.0/gobject/gsourceclosure.h
+map-common.o: /opt/gnome/include/glib-2.0/gobject/gtypemodule.h
+map-common.o: /opt/gnome/include/glib-2.0/gobject/gtypeplugin.h
+map-common.o: /opt/gnome/include/glib-2.0/gobject/gvaluearray.h
+map-common.o: /opt/gnome/include/glib-2.0/gobject/gvaluetypes.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-policy-type.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-context.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orbit-small.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa-defs.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa-types.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/poa/orbit-adaptor.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/poa/portableserver-poa-type.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/poa/portableserver-current-type.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/dynamic/dynamic.h
+map-common.o: /opt/gnome/include/orbit-2.0/orbit/dynamic/dynamic-defs.h
+map-skelimpl.o: map.h /opt/gnome/include/glib-2.0/glib.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/galloca.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gtypes.h
+map-skelimpl.o: /opt/gnome/lib/glib-2.0/include/glibconfig.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gmacros.h
+map-skelimpl.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+map-skelimpl.o: /usr/include/limits.h /usr/include/features.h
+map-skelimpl.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+map-skelimpl.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/limits.h
+map-skelimpl.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/float.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/garray.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gasyncqueue.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gthread.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gerror.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gquark.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gbacktrace.h
+map-skelimpl.o: /usr/include/signal.h /usr/include/bits/sigset.h
+map-skelimpl.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+map-skelimpl.o: /usr/include/bits/typesizes.h /usr/include/bits/signum.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gcache.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/glist.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gmem.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gcompletion.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gconvert.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gdataset.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gdate.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gdir.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gfileutils.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/ghash.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/ghook.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/giochannel.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gmain.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gslist.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gstring.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gunicode.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gmarkup.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gmessages.h
+map-skelimpl.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gnode.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gpattern.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gprimes.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gqsort.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gqueue.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/grand.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/grel.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gscanner.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gshell.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gspawn.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gstrfuncs.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gthreadpool.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gtimer.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gtree.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib/gutils.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orbit-types.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/util/orbit-util.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orbit-config.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/util/basic_types.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/util/orbit-genrand.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orb-core-types.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orb-types.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-typecode-type.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-any-type.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-pobj.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-environment-type.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-orb-type.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orbit-object.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-context-type.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-typecode.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/allocators.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-defs.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa-basics.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orbit-interface.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orbit.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orb-core.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/iop-defs.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-orb.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-string.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-environment.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-any.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-object-type.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-object.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/glib-object.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/gobject/gboxed.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/gobject/gtype.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/gobject/genums.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/gobject/gobject.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/gobject/gvalue.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/gobject/gparam.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/gobject/gclosure.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/gobject/gsignal.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/gobject/gmarshal.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/gobject/gparamspecs.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/gobject/gsourceclosure.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/gobject/gtypemodule.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/gobject/gtypeplugin.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/gobject/gvaluearray.h
+map-skelimpl.o: /opt/gnome/include/glib-2.0/gobject/gvaluetypes.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-policy-type.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-context.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orbit-small.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa-defs.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa-types.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/poa/orbit-adaptor.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/poa/portableserver-poa-type.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/poa/portableserver-current-type.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/dynamic/dynamic.h
+map-skelimpl.o: /opt/gnome/include/orbit-2.0/orbit/dynamic/dynamic-defs.h
+map-skels.o: /usr/include/string.h /usr/include/features.h
+map-skels.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+map-skels.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h map.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/galloca.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gtypes.h
+map-skels.o: /opt/gnome/lib/glib-2.0/include/glibconfig.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gmacros.h /usr/include/limits.h
+map-skels.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/limits.h
+map-skels.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/float.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/garray.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gasyncqueue.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gthread.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gerror.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gquark.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gbacktrace.h
+map-skels.o: /usr/include/signal.h /usr/include/bits/sigset.h
+map-skels.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+map-skels.o: /usr/include/bits/typesizes.h /usr/include/bits/signum.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gcache.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/glist.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gmem.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gcompletion.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gconvert.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gdataset.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gdate.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gdir.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gfileutils.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/ghash.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/ghook.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/giochannel.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gmain.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gslist.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gstring.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gunicode.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gmarkup.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gmessages.h
+map-skels.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gnode.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gpattern.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gprimes.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gqsort.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gqueue.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/grand.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/grel.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gscanner.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gshell.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gspawn.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gstrfuncs.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gthreadpool.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gtimer.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gtree.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib/gutils.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orbit-types.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/util/orbit-util.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orbit-config.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/util/basic_types.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/util/orbit-genrand.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orb-core-types.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orb-types.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-typecode-type.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-any-type.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-pobj.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-environment-type.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-orb-type.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orbit-object.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-context-type.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-typecode.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/allocators.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-defs.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa-basics.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orbit-interface.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orbit.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orb-core.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/iop-defs.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-orb.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-string.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-environment.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-any.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-object-type.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-object.h
+map-skels.o: /opt/gnome/include/glib-2.0/glib-object.h
+map-skels.o: /opt/gnome/include/glib-2.0/gobject/gboxed.h
+map-skels.o: /opt/gnome/include/glib-2.0/gobject/gtype.h
+map-skels.o: /opt/gnome/include/glib-2.0/gobject/genums.h
+map-skels.o: /opt/gnome/include/glib-2.0/gobject/gobject.h
+map-skels.o: /opt/gnome/include/glib-2.0/gobject/gvalue.h
+map-skels.o: /opt/gnome/include/glib-2.0/gobject/gparam.h
+map-skels.o: /opt/gnome/include/glib-2.0/gobject/gclosure.h
+map-skels.o: /opt/gnome/include/glib-2.0/gobject/gsignal.h
+map-skels.o: /opt/gnome/include/glib-2.0/gobject/gmarshal.h
+map-skels.o: /opt/gnome/include/glib-2.0/gobject/gparamspecs.h
+map-skels.o: /opt/gnome/include/glib-2.0/gobject/gsourceclosure.h
+map-skels.o: /opt/gnome/include/glib-2.0/gobject/gtypemodule.h
+map-skels.o: /opt/gnome/include/glib-2.0/gobject/gtypeplugin.h
+map-skels.o: /opt/gnome/include/glib-2.0/gobject/gvaluearray.h
+map-skels.o: /opt/gnome/include/glib-2.0/gobject/gvaluetypes.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-policy-type.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-context.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orbit-small.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa-defs.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa-types.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/poa/orbit-adaptor.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/poa/portableserver-poa-type.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/poa/portableserver-current-type.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/dynamic/dynamic.h
+map-skels.o: /opt/gnome/include/orbit-2.0/orbit/dynamic/dynamic-defs.h
+map-srv.o: /usr/include/stdio.h /usr/include/features.h
+map-srv.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+map-srv.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+map-srv.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+map-srv.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+map-srv.o: /usr/include/_G_config.h /usr/include/wchar.h
+map-srv.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+map-srv.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+map-srv.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+map-srv.o: /usr/include/stdlib.h /usr/include/string.h /usr/include/ctype.h
+map-srv.o: /usr/include/endian.h /usr/include/bits/endian.h map.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/galloca.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gtypes.h
+map-srv.o: /opt/gnome/lib/glib-2.0/include/glibconfig.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gmacros.h /usr/include/limits.h
+map-srv.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/limits.h
+map-srv.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/float.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/garray.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gasyncqueue.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gthread.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gerror.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gquark.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gbacktrace.h
+map-srv.o: /usr/include/signal.h /usr/include/bits/sigset.h
+map-srv.o: /usr/include/bits/signum.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gcache.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/glist.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gmem.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gcompletion.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gconvert.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gdataset.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gdate.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gdir.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gfileutils.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/ghash.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/ghook.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/giochannel.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gmain.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gslist.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gstring.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gunicode.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gmarkup.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gmessages.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gnode.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gpattern.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gprimes.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gqsort.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gqueue.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/grand.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/grel.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gscanner.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gshell.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gspawn.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gstrfuncs.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gthreadpool.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gtimer.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gtree.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib/gutils.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orbit-types.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/util/orbit-util.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orbit-config.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/util/basic_types.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/util/orbit-genrand.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orb-core-types.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orb-types.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-typecode-type.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-any-type.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-pobj.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-environment-type.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-orb-type.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orbit-object.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-context-type.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-typecode.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/allocators.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-defs.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa-basics.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orbit-interface.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orbit.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orb-core.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/iop-defs.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-orb.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-string.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-environment.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-any.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-object-type.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-object.h
+map-srv.o: /opt/gnome/include/glib-2.0/glib-object.h
+map-srv.o: /opt/gnome/include/glib-2.0/gobject/gboxed.h
+map-srv.o: /opt/gnome/include/glib-2.0/gobject/gtype.h
+map-srv.o: /opt/gnome/include/glib-2.0/gobject/genums.h
+map-srv.o: /opt/gnome/include/glib-2.0/gobject/gobject.h
+map-srv.o: /opt/gnome/include/glib-2.0/gobject/gvalue.h
+map-srv.o: /opt/gnome/include/glib-2.0/gobject/gparam.h
+map-srv.o: /opt/gnome/include/glib-2.0/gobject/gclosure.h
+map-srv.o: /opt/gnome/include/glib-2.0/gobject/gsignal.h
+map-srv.o: /opt/gnome/include/glib-2.0/gobject/gmarshal.h
+map-srv.o: /opt/gnome/include/glib-2.0/gobject/gparamspecs.h
+map-srv.o: /opt/gnome/include/glib-2.0/gobject/gsourceclosure.h
+map-srv.o: /opt/gnome/include/glib-2.0/gobject/gtypemodule.h
+map-srv.o: /opt/gnome/include/glib-2.0/gobject/gtypeplugin.h
+map-srv.o: /opt/gnome/include/glib-2.0/gobject/gvaluearray.h
+map-srv.o: /opt/gnome/include/glib-2.0/gobject/gvaluetypes.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-policy-type.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-context.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orbit-small.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa-defs.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa-types.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/poa/orbit-adaptor.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/poa/portableserver-poa-type.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/poa/portableserver-current-type.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/dynamic/dynamic.h
+map-srv.o: /opt/gnome/include/orbit-2.0/orbit/dynamic/dynamic-defs.h coord.h
+map-srv.o: route.h transform.h point.h statusbar.h map-share.h main.h
+map-srv.o: /usr/include/math.h /usr/include/bits/huge_val.h
+map-srv.o: /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h
+map-stubs.o: /usr/include/string.h /usr/include/features.h
+map-stubs.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+map-stubs.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h map.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/galloca.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gtypes.h
+map-stubs.o: /opt/gnome/lib/glib-2.0/include/glibconfig.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gmacros.h /usr/include/limits.h
+map-stubs.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/limits.h
+map-stubs.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/float.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/garray.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gasyncqueue.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gthread.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gerror.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gquark.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gbacktrace.h
+map-stubs.o: /usr/include/signal.h /usr/include/bits/sigset.h
+map-stubs.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+map-stubs.o: /usr/include/bits/typesizes.h /usr/include/bits/signum.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gcache.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/glist.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gmem.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gcompletion.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gconvert.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gdataset.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gdate.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gdir.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gfileutils.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/ghash.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/ghook.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/giochannel.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gmain.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gslist.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gstring.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gunicode.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gmarkup.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gmessages.h
+map-stubs.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gnode.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gpattern.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gprimes.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gqsort.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gqueue.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/grand.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/grel.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gscanner.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gshell.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gspawn.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gstrfuncs.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gthreadpool.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gtimer.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gtree.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib/gutils.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orbit-types.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/util/orbit-util.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orbit-config.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/util/basic_types.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/util/orbit-genrand.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orb-core-types.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orb-types.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-typecode-type.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-any-type.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-pobj.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-environment-type.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-orb-type.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orbit-object.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-context-type.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-typecode.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/allocators.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-defs.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa-basics.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orbit-interface.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orbit.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orb-core.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/iop-defs.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-orb.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-string.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-environment.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-any.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-object-type.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-object.h
+map-stubs.o: /opt/gnome/include/glib-2.0/glib-object.h
+map-stubs.o: /opt/gnome/include/glib-2.0/gobject/gboxed.h
+map-stubs.o: /opt/gnome/include/glib-2.0/gobject/gtype.h
+map-stubs.o: /opt/gnome/include/glib-2.0/gobject/genums.h
+map-stubs.o: /opt/gnome/include/glib-2.0/gobject/gobject.h
+map-stubs.o: /opt/gnome/include/glib-2.0/gobject/gvalue.h
+map-stubs.o: /opt/gnome/include/glib-2.0/gobject/gparam.h
+map-stubs.o: /opt/gnome/include/glib-2.0/gobject/gclosure.h
+map-stubs.o: /opt/gnome/include/glib-2.0/gobject/gsignal.h
+map-stubs.o: /opt/gnome/include/glib-2.0/gobject/gmarshal.h
+map-stubs.o: /opt/gnome/include/glib-2.0/gobject/gparamspecs.h
+map-stubs.o: /opt/gnome/include/glib-2.0/gobject/gsourceclosure.h
+map-stubs.o: /opt/gnome/include/glib-2.0/gobject/gtypemodule.h
+map-stubs.o: /opt/gnome/include/glib-2.0/gobject/gtypeplugin.h
+map-stubs.o: /opt/gnome/include/glib-2.0/gobject/gvaluearray.h
+map-stubs.o: /opt/gnome/include/glib-2.0/gobject/gvaluetypes.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-policy-type.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-context.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orbit-small.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa-defs.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa-types.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/poa/orbit-adaptor.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/poa/portableserver-poa-type.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/poa/portableserver-current-type.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/dynamic/dynamic.h
+map-stubs.o: /opt/gnome/include/orbit-2.0/orbit/dynamic/dynamic-defs.h
+map_data.o: /usr/include/stdio.h /usr/include/features.h
+map_data.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+map_data.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+map_data.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+map_data.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+map_data.o: /usr/include/_G_config.h /usr/include/wchar.h
+map_data.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+map_data.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+map_data.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+map_data.o: /usr/include/stdlib.h /usr/include/string.h
+map_data.o: /opt/gnome/include/glib-2.0/glib.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/galloca.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gtypes.h
+map_data.o: /opt/gnome/lib/glib-2.0/include/glibconfig.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gmacros.h /usr/include/limits.h
+map_data.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/limits.h
+map_data.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/float.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/garray.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gasyncqueue.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gthread.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gerror.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gquark.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gbacktrace.h
+map_data.o: /usr/include/signal.h /usr/include/bits/sigset.h
+map_data.o: /usr/include/bits/signum.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gcache.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/glist.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gmem.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gcompletion.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gconvert.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gdataset.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gdate.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gdir.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gfileutils.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/ghash.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/ghook.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/giochannel.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gmain.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gslist.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gstring.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gunicode.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gmarkup.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gmessages.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gnode.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gpattern.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gprimes.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gqsort.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gqueue.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/grand.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/grel.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gscanner.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gshell.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gspawn.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gstrfuncs.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gthreadpool.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gtimer.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gtree.h
+map_data.o: /opt/gnome/include/glib-2.0/glib/gutils.h file.h param.h block.h
+map_data.o: coord.h transform.h point.h map_data.h log.h
+mapclient.o: /usr/include/stdio.h /usr/include/features.h
+mapclient.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+mapclient.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+mapclient.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+mapclient.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+mapclient.o: /usr/include/_G_config.h /usr/include/wchar.h
+mapclient.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+mapclient.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+mapclient.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+mapclient.o: /usr/include/stdlib.h /usr/include/string.h map.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/galloca.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gtypes.h
+mapclient.o: /opt/gnome/lib/glib-2.0/include/glibconfig.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gmacros.h /usr/include/limits.h
+mapclient.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/limits.h
+mapclient.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/float.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/garray.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gasyncqueue.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gthread.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gerror.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gquark.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gbacktrace.h
+mapclient.o: /usr/include/signal.h /usr/include/bits/sigset.h
+mapclient.o: /usr/include/bits/signum.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gcache.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/glist.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gmem.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gcompletion.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gconvert.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gdataset.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gdate.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gdir.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gfileutils.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/ghash.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/ghook.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/giochannel.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gmain.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gslist.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gstring.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gunicode.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gmarkup.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gmessages.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gnode.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gpattern.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gprimes.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gqsort.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gqueue.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/grand.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/grel.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gscanner.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gshell.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gspawn.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gstrfuncs.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gthreadpool.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gtimer.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gtree.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib/gutils.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orbit-types.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/util/orbit-util.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orbit-config.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/util/basic_types.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/util/orbit-genrand.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orb-core-types.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orb-types.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-typecode-type.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-any-type.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-pobj.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-environment-type.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-orb-type.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orbit-object.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-context-type.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-typecode.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/allocators.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-defs.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa-basics.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orbit-interface.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orbit.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orb-core.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/iop-defs.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-orb.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-string.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-environment.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-any.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-object-type.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-object.h
+mapclient.o: /opt/gnome/include/glib-2.0/glib-object.h
+mapclient.o: /opt/gnome/include/glib-2.0/gobject/gboxed.h
+mapclient.o: /opt/gnome/include/glib-2.0/gobject/gtype.h
+mapclient.o: /opt/gnome/include/glib-2.0/gobject/genums.h
+mapclient.o: /opt/gnome/include/glib-2.0/gobject/gobject.h
+mapclient.o: /opt/gnome/include/glib-2.0/gobject/gvalue.h
+mapclient.o: /opt/gnome/include/glib-2.0/gobject/gparam.h
+mapclient.o: /opt/gnome/include/glib-2.0/gobject/gclosure.h
+mapclient.o: /opt/gnome/include/glib-2.0/gobject/gsignal.h
+mapclient.o: /opt/gnome/include/glib-2.0/gobject/gmarshal.h
+mapclient.o: /opt/gnome/include/glib-2.0/gobject/gparamspecs.h
+mapclient.o: /opt/gnome/include/glib-2.0/gobject/gsourceclosure.h
+mapclient.o: /opt/gnome/include/glib-2.0/gobject/gtypemodule.h
+mapclient.o: /opt/gnome/include/glib-2.0/gobject/gtypeplugin.h
+mapclient.o: /opt/gnome/include/glib-2.0/gobject/gvaluearray.h
+mapclient.o: /opt/gnome/include/glib-2.0/gobject/gvaluetypes.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-policy-type.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-context.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orbit-small.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa-defs.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa-types.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/poa/orbit-adaptor.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/poa/portableserver-poa-type.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/poa/portableserver-current-type.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/dynamic/dynamic.h
+mapclient.o: /opt/gnome/include/orbit-2.0/orbit/dynamic/dynamic-defs.h
+menu.o: /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h
+menu.o: /usr/include/gnu/stubs.h
+menu.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+menu.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+menu.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+menu.o: /usr/include/_G_config.h /usr/include/wchar.h
+menu.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+menu.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+menu.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+menu.o: /usr/include/string.h /usr/include/stdlib.h /usr/include/math.h
+menu.o: /usr/include/bits/huge_val.h /usr/include/bits/mathdef.h
+menu.o: /usr/include/bits/mathcalls.h /usr/include/time.h coord.h
+menu.o: data_window.h route.h cursor.h menu.h command.h transform.h point.h
+menu.o: street.h statusbar.h destination.h main.h container.h
+navigation.o: /usr/include/math.h /usr/include/features.h
+navigation.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+navigation.o: /usr/include/bits/huge_val.h /usr/include/bits/mathdef.h
+navigation.o: /usr/include/bits/mathcalls.h /usr/include/stdlib.h
+navigation.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h coord.h
+navigation.o: param.h block.h transform.h point.h route.h street.h
+navigation.o: street_name.h speech.h navigation.h data_window.h
+param.o: /usr/include/stdio.h /usr/include/features.h
+param.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+param.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+param.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+param.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+param.o: /usr/include/_G_config.h /usr/include/wchar.h
+param.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+param.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+param.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+param.o: /usr/include/string.h /usr/include/malloc.h param.h
+phrase.o: /usr/include/time.h /usr/include/bits/types.h
+phrase.o: /usr/include/features.h /usr/include/sys/cdefs.h
+phrase.o: /usr/include/gnu/stubs.h /usr/include/bits/wordsize.h
+phrase.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+phrase.o: /usr/include/bits/typesizes.h coord.h route.h speech.h
+plugin.o: /usr/include/stdio.h /usr/include/features.h
+plugin.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+plugin.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+plugin.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+plugin.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+plugin.o: /usr/include/_G_config.h /usr/include/wchar.h
+plugin.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+plugin.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+plugin.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+plugin.o: /usr/include/dlfcn.h /usr/include/bits/dlfcn.h plugin.h
+poly.o: /usr/include/stdlib.h /usr/include/features.h
+poly.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+poly.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+poly.o: /usr/include/assert.h coord.h map_data.h file.h param.h block.h
+poly.o: transform.h point.h poly.h display.h draw_info.h data_window.h
+poly.o: container.h
+popup.o: /usr/include/malloc.h
+popup.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+popup.o: /usr/include/string.h /usr/include/features.h
+popup.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+popup.o: /usr/include/stdio.h /usr/include/bits/types.h
+popup.o: /usr/include/bits/wordsize.h /usr/include/bits/typesizes.h
+popup.o: /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h
+popup.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+popup.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+popup.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+popup.o: /usr/include/assert.h /opt/gnome/include/gtk-2.0/gtk/gtk.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk/gdk.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk/gdkcolor.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk/gdktypes.h
+popup.o: /opt/gnome/include/glib-2.0/glib.h
+popup.o: /opt/gnome/include/glib-2.0/glib/galloca.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gtypes.h
+popup.o: /opt/gnome/lib/glib-2.0/include/glibconfig.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gmacros.h /usr/include/limits.h
+popup.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/limits.h
+popup.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/float.h
+popup.o: /opt/gnome/include/glib-2.0/glib/garray.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gasyncqueue.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gthread.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gerror.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gquark.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gbacktrace.h /usr/include/signal.h
+popup.o: /usr/include/bits/sigset.h /usr/include/bits/signum.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gcache.h
+popup.o: /opt/gnome/include/glib-2.0/glib/glist.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gmem.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gcompletion.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gconvert.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gdataset.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gdate.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gdir.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gfileutils.h
+popup.o: /opt/gnome/include/glib-2.0/glib/ghash.h
+popup.o: /opt/gnome/include/glib-2.0/glib/ghook.h
+popup.o: /opt/gnome/include/glib-2.0/glib/giochannel.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gmain.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gslist.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gstring.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gunicode.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gmarkup.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gmessages.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gnode.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gpattern.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gprimes.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gqsort.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gqueue.h
+popup.o: /opt/gnome/include/glib-2.0/glib/grand.h
+popup.o: /opt/gnome/include/glib-2.0/glib/grel.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gscanner.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gshell.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gspawn.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gstrfuncs.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gthreadpool.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gtimer.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gtree.h
+popup.o: /opt/gnome/include/glib-2.0/glib/gutils.h
+popup.o: /opt/gnome/include/pango-1.0/pango/pango.h
+popup.o: /opt/gnome/include/pango-1.0/pango/pango-attributes.h
+popup.o: /opt/gnome/include/pango-1.0/pango/pango-font.h
+popup.o: /opt/gnome/include/pango-1.0/pango/pango-coverage.h
+popup.o: /opt/gnome/include/pango-1.0/pango/pango-types.h
+popup.o: /opt/gnome/include/glib-2.0/glib-object.h
+popup.o: /opt/gnome/include/glib-2.0/gobject/gboxed.h
+popup.o: /opt/gnome/include/glib-2.0/gobject/gtype.h
+popup.o: /opt/gnome/include/glib-2.0/gobject/genums.h
+popup.o: /opt/gnome/include/glib-2.0/gobject/gobject.h
+popup.o: /opt/gnome/include/glib-2.0/gobject/gvalue.h
+popup.o: /opt/gnome/include/glib-2.0/gobject/gparam.h
+popup.o: /opt/gnome/include/glib-2.0/gobject/gclosure.h
+popup.o: /opt/gnome/include/glib-2.0/gobject/gsignal.h
+popup.o: /opt/gnome/include/glib-2.0/gobject/gmarshal.h
+popup.o: /opt/gnome/include/glib-2.0/gobject/gparamspecs.h
+popup.o: /opt/gnome/include/glib-2.0/gobject/gsourceclosure.h
+popup.o: /opt/gnome/include/glib-2.0/gobject/gtypemodule.h
+popup.o: /opt/gnome/include/glib-2.0/gobject/gtypeplugin.h
+popup.o: /opt/gnome/include/glib-2.0/gobject/gvaluearray.h
+popup.o: /opt/gnome/include/glib-2.0/gobject/gvaluetypes.h
+popup.o: /opt/gnome/include/pango-1.0/pango/pango-break.h
+popup.o: /opt/gnome/include/pango-1.0/pango/pango-item.h
+popup.o: /opt/gnome/include/pango-1.0/pango/pango-context.h
+popup.o: /opt/gnome/include/pango-1.0/pango/pango-fontmap.h
+popup.o: /opt/gnome/include/pango-1.0/pango/pango-fontset.h
+popup.o: /opt/gnome/include/pango-1.0/pango/pango-engine.h
+popup.o: /opt/gnome/include/pango-1.0/pango/pango-glyph.h
+popup.o: /opt/gnome/include/pango-1.0/pango/pango-enum-types.h
+popup.o: /opt/gnome/include/pango-1.0/pango/pango-layout.h
+popup.o: /opt/gnome/include/pango-1.0/pango/pango-glyph-item.h
+popup.o: /opt/gnome/include/pango-1.0/pango/pango-tabs.h
+popup.o: /opt/gnome/lib/gtk-2.0/include/gdkconfig.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk/gdkcursor.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk/gdkdisplay.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk/gdkevents.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk/gdkdnd.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk/gdkinput.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk/gdkdrawable.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk/gdkgc.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk/gdkrgb.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-features.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-loader.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk-pixbuf/gdk-pixbuf-enum-types.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk/gdkenumtypes.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk/gdkfont.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk/gdkimage.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk/gdkkeys.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk/gdkdisplaymanager.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk/gdkpango.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk/gdkpixbuf.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk/gdkpixmap.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk/gdkproperty.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk/gdkregion.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk/gdkscreen.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk/gdkselection.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk/gdkvisual.h
+popup.o: /opt/gnome/include/gtk-2.0/gdk/gdkwindow.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkaccelgroup.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkenums.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkaccellabel.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtklabel.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkmisc.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkwidget.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkobject.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtktypeutils.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtktypebuiltins.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkdebug.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkadjustment.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkstyle.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtksettings.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkrc.h
+popup.o: /opt/gnome/include/atk-1.0/atk/atkobject.h
+popup.o: /opt/gnome/include/atk-1.0/atk/atkstate.h
+popup.o: /opt/gnome/include/atk-1.0/atk/atkrelationtype.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkwindow.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkbin.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkcontainer.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkmenu.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkmenushell.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkaccelmap.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkaccessible.h
+popup.o: /opt/gnome/include/atk-1.0/atk/atk.h
+popup.o: /opt/gnome/include/atk-1.0/atk/atkaction.h
+popup.o: /opt/gnome/include/atk-1.0/atk/atkcomponent.h
+popup.o: /opt/gnome/include/atk-1.0/atk/atkutil.h
+popup.o: /opt/gnome/include/atk-1.0/atk/atkdocument.h
+popup.o: /opt/gnome/include/atk-1.0/atk/atkeditabletext.h
+popup.o: /opt/gnome/include/atk-1.0/atk/atktext.h
+popup.o: /opt/gnome/include/atk-1.0/atk/atkgobjectaccessible.h
+popup.o: /opt/gnome/include/atk-1.0/atk/atkhyperlink.h
+popup.o: /opt/gnome/include/atk-1.0/atk/atkhypertext.h
+popup.o: /opt/gnome/include/atk-1.0/atk/atkimage.h
+popup.o: /opt/gnome/include/atk-1.0/atk/atknoopobject.h
+popup.o: /opt/gnome/include/atk-1.0/atk/atknoopobjectfactory.h
+popup.o: /opt/gnome/include/atk-1.0/atk/atkobjectfactory.h
+popup.o: /opt/gnome/include/atk-1.0/atk/atkregistry.h
+popup.o: /opt/gnome/include/atk-1.0/atk/atkobjectfactory.h
+popup.o: /opt/gnome/include/atk-1.0/atk/atkrelation.h
+popup.o: /opt/gnome/include/atk-1.0/atk/atkrelationset.h
+popup.o: /opt/gnome/include/atk-1.0/atk/atkselection.h
+popup.o: /opt/gnome/include/atk-1.0/atk/atkstateset.h
+popup.o: /opt/gnome/include/atk-1.0/atk/atkstreamablecontent.h
+popup.o: /opt/gnome/include/atk-1.0/atk/atktable.h
+popup.o: /opt/gnome/include/atk-1.0/atk/atkvalue.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkalignment.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkaspectframe.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkframe.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkarrow.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkbindings.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkbox.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkbbox.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkbutton.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkcalendar.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtksignal.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkmarshal.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkcellrenderer.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkcelleditable.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkcellrenderertext.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkcellrenderertoggle.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkcellrendererpixbuf.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkcheckbutton.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtktogglebutton.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkcheckmenuitem.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkmenuitem.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkitem.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkclipboard.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkselection.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkclist.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkhscrollbar.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkscrollbar.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkrange.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkvscrollbar.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkcolorsel.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkdialog.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkvbox.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkcolorseldialog.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkcombo.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkhbox.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkctree.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkcurve.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkdrawingarea.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkdnd.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkeditable.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkentry.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkimcontext.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkeventbox.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkfilesel.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkfixed.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkfontsel.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkgamma.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkgc.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkhandlebox.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkhbbox.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkhpaned.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkpaned.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkhruler.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkruler.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkhscale.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkscale.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkhseparator.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkseparator.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkiconfactory.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkimage.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkimagemenuitem.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkimcontextsimple.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkimmulticontext.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkinputdialog.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkinvisible.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkitemfactory.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtklayout.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtklist.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtklistitem.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkliststore.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtktreemodel.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtktreesortable.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkmain.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkmenubar.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkmessagedialog.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtknotebook.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkoldeditable.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkoptionmenu.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkpixmap.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkplug.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtksocket.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkpreview.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkprogress.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkprogressbar.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkradiobutton.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkradiomenuitem.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkscrolledwindow.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkviewport.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkseparatormenuitem.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtksizegroup.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkspinbutton.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkstock.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkstatusbar.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtktable.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtktearoffmenuitem.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtktext.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtktextbuffer.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtktexttagtable.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtktexttag.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtktextiter.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtktextchild.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtktextmark.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtktextview.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtktipsquery.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtktoolbar.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtktooltips.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtktree.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtktreednd.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtktreeitem.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtktreemodelsort.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtktreeselection.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtktreeview.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtktreeviewcolumn.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtktreestore.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkvbbox.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkversion.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkvpaned.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkvruler.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkvscale.h
+popup.o: /opt/gnome/include/gtk-2.0/gtk/gtkvseparator.h coord.h param.h
+popup.o: map_data.h block.h transform.h point.h display.h town.h street.h
+popup.o: poly.h log.h popup.h plugin.h vehicle.h route.h cursor.h statusbar.h
+popup.o: container.h
+profile.o: /usr/include/stdlib.h /usr/include/features.h
+profile.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+profile.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+profile.o: /usr/include/sys/time.h /usr/include/bits/types.h
+profile.o: /usr/include/bits/wordsize.h /usr/include/bits/typesizes.h
+profile.o: /usr/include/time.h /usr/include/bits/time.h
+profile.o: /usr/include/sys/select.h /usr/include/bits/select.h
+profile.o: /usr/include/bits/sigset.h
+route.o: /usr/include/stdio.h /usr/include/features.h
+route.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+route.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+route.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+route.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+route.o: /usr/include/_G_config.h /usr/include/wchar.h
+route.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+route.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+route.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+route.o: /usr/include/math.h /usr/include/bits/huge_val.h
+route.o: /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h
+route.o: /usr/include/assert.h /usr/include/unistd.h
+route.o: /usr/include/bits/posix_opt.h /usr/include/bits/confname.h
+route.o: /usr/include/sys/time.h /usr/include/time.h /usr/include/bits/time.h
+route.o: /usr/include/sys/select.h /usr/include/bits/select.h
+route.o: /usr/include/bits/sigset.h /opt/gnome/include/glib-2.0/glib.h
+route.o: /opt/gnome/include/glib-2.0/glib/galloca.h
+route.o: /opt/gnome/include/glib-2.0/glib/gtypes.h
+route.o: /opt/gnome/lib/glib-2.0/include/glibconfig.h
+route.o: /opt/gnome/include/glib-2.0/glib/gmacros.h /usr/include/limits.h
+route.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/limits.h
+route.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/float.h
+route.o: /opt/gnome/include/glib-2.0/glib/garray.h
+route.o: /opt/gnome/include/glib-2.0/glib/gasyncqueue.h
+route.o: /opt/gnome/include/glib-2.0/glib/gthread.h
+route.o: /opt/gnome/include/glib-2.0/glib/gerror.h
+route.o: /opt/gnome/include/glib-2.0/glib/gquark.h
+route.o: /opt/gnome/include/glib-2.0/glib/gbacktrace.h /usr/include/signal.h
+route.o: /usr/include/bits/signum.h /opt/gnome/include/glib-2.0/glib/gcache.h
+route.o: /opt/gnome/include/glib-2.0/glib/glist.h
+route.o: /opt/gnome/include/glib-2.0/glib/gmem.h
+route.o: /opt/gnome/include/glib-2.0/glib/gcompletion.h
+route.o: /opt/gnome/include/glib-2.0/glib/gconvert.h
+route.o: /opt/gnome/include/glib-2.0/glib/gdataset.h
+route.o: /opt/gnome/include/glib-2.0/glib/gdate.h
+route.o: /opt/gnome/include/glib-2.0/glib/gdir.h
+route.o: /opt/gnome/include/glib-2.0/glib/gfileutils.h
+route.o: /opt/gnome/include/glib-2.0/glib/ghash.h
+route.o: /opt/gnome/include/glib-2.0/glib/ghook.h
+route.o: /opt/gnome/include/glib-2.0/glib/giochannel.h
+route.o: /opt/gnome/include/glib-2.0/glib/gmain.h
+route.o: /opt/gnome/include/glib-2.0/glib/gslist.h
+route.o: /opt/gnome/include/glib-2.0/glib/gstring.h
+route.o: /opt/gnome/include/glib-2.0/glib/gunicode.h
+route.o: /opt/gnome/include/glib-2.0/glib/gmarkup.h
+route.o: /opt/gnome/include/glib-2.0/glib/gmessages.h
+route.o: /opt/gnome/include/glib-2.0/glib/gnode.h
+route.o: /opt/gnome/include/glib-2.0/glib/gpattern.h
+route.o: /opt/gnome/include/glib-2.0/glib/gprimes.h
+route.o: /opt/gnome/include/glib-2.0/glib/gqsort.h
+route.o: /opt/gnome/include/glib-2.0/glib/gqueue.h
+route.o: /opt/gnome/include/glib-2.0/glib/grand.h
+route.o: /opt/gnome/include/glib-2.0/glib/grel.h
+route.o: /opt/gnome/include/glib-2.0/glib/gscanner.h
+route.o: /opt/gnome/include/glib-2.0/glib/gshell.h
+route.o: /opt/gnome/include/glib-2.0/glib/gspawn.h
+route.o: /opt/gnome/include/glib-2.0/glib/gstrfuncs.h
+route.o: /opt/gnome/include/glib-2.0/glib/gthreadpool.h
+route.o: /opt/gnome/include/glib-2.0/glib/gtimer.h
+route.o: /opt/gnome/include/glib-2.0/glib/gtree.h
+route.o: /opt/gnome/include/glib-2.0/glib/gutils.h coord.h param.h map_data.h
+route.o: block.h transform.h point.h street.h street_data.h display.h route.h
+route.o: phrase.h navigation.h fib-1.0/fib.h
+search.o: /opt/gnome/include/glib-2.0/glib.h
+search.o: /opt/gnome/include/glib-2.0/glib/galloca.h
+search.o: /opt/gnome/include/glib-2.0/glib/gtypes.h
+search.o: /opt/gnome/lib/glib-2.0/include/glibconfig.h
+search.o: /opt/gnome/include/glib-2.0/glib/gmacros.h
+search.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+search.o: /usr/include/limits.h /usr/include/features.h
+search.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+search.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/limits.h
+search.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/float.h
+search.o: /opt/gnome/include/glib-2.0/glib/garray.h
+search.o: /opt/gnome/include/glib-2.0/glib/gasyncqueue.h
+search.o: /opt/gnome/include/glib-2.0/glib/gthread.h
+search.o: /opt/gnome/include/glib-2.0/glib/gerror.h
+search.o: /opt/gnome/include/glib-2.0/glib/gquark.h
+search.o: /opt/gnome/include/glib-2.0/glib/gbacktrace.h /usr/include/signal.h
+search.o: /usr/include/bits/sigset.h /usr/include/bits/types.h
+search.o: /usr/include/bits/wordsize.h /usr/include/bits/typesizes.h
+search.o: /usr/include/bits/signum.h
+search.o: /opt/gnome/include/glib-2.0/glib/gcache.h
+search.o: /opt/gnome/include/glib-2.0/glib/glist.h
+search.o: /opt/gnome/include/glib-2.0/glib/gmem.h
+search.o: /opt/gnome/include/glib-2.0/glib/gcompletion.h
+search.o: /opt/gnome/include/glib-2.0/glib/gconvert.h
+search.o: /opt/gnome/include/glib-2.0/glib/gdataset.h
+search.o: /opt/gnome/include/glib-2.0/glib/gdate.h
+search.o: /opt/gnome/include/glib-2.0/glib/gdir.h
+search.o: /opt/gnome/include/glib-2.0/glib/gfileutils.h
+search.o: /opt/gnome/include/glib-2.0/glib/ghash.h
+search.o: /opt/gnome/include/glib-2.0/glib/ghook.h
+search.o: /opt/gnome/include/glib-2.0/glib/giochannel.h
+search.o: /opt/gnome/include/glib-2.0/glib/gmain.h
+search.o: /opt/gnome/include/glib-2.0/glib/gslist.h
+search.o: /opt/gnome/include/glib-2.0/glib/gstring.h
+search.o: /opt/gnome/include/glib-2.0/glib/gunicode.h
+search.o: /opt/gnome/include/glib-2.0/glib/gmarkup.h
+search.o: /opt/gnome/include/glib-2.0/glib/gmessages.h
+search.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+search.o: /opt/gnome/include/glib-2.0/glib/gnode.h
+search.o: /opt/gnome/include/glib-2.0/glib/gpattern.h
+search.o: /opt/gnome/include/glib-2.0/glib/gprimes.h
+search.o: /opt/gnome/include/glib-2.0/glib/gqsort.h
+search.o: /opt/gnome/include/glib-2.0/glib/gqueue.h
+search.o: /opt/gnome/include/glib-2.0/glib/grand.h
+search.o: /opt/gnome/include/glib-2.0/glib/grel.h
+search.o: /opt/gnome/include/glib-2.0/glib/gscanner.h
+search.o: /opt/gnome/include/glib-2.0/glib/gshell.h
+search.o: /opt/gnome/include/glib-2.0/glib/gspawn.h
+search.o: /opt/gnome/include/glib-2.0/glib/gstrfuncs.h
+search.o: /opt/gnome/include/glib-2.0/glib/gthreadpool.h
+search.o: /opt/gnome/include/glib-2.0/glib/gtimer.h
+search.o: /opt/gnome/include/glib-2.0/glib/gtree.h
+search.o: /opt/gnome/include/glib-2.0/glib/gutils.h /usr/include/stdlib.h
+search.o: /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h
+search.o: /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h
+search.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+search.o: /usr/include/string.h search.h coord.h country.h town.h street.h
+search.o: street_name.h
+speech.o: /usr/include/sys/types.h /usr/include/features.h
+speech.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+speech.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+speech.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+speech.o: /usr/include/bits/typesizes.h /usr/include/time.h
+speech.o: /usr/include/sys/socket.h /usr/include/sys/uio.h
+speech.o: /usr/include/bits/uio.h /usr/include/bits/socket.h
+speech.o: /usr/include/limits.h
+speech.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/limits.h
+speech.o: /usr/include/bits/sockaddr.h /usr/include/asm/socket.h
+speech.o: /usr/include/asm/sockios.h /usr/include/netinet/in.h
+speech.o: /usr/include/stdint.h /usr/include/bits/wchar.h
+speech.o: /usr/include/bits/in.h /usr/include/endian.h
+speech.o: /usr/include/bits/endian.h /usr/include/bits/byteswap.h
+speech.o: /usr/include/arpa/inet.h /usr/include/unistd.h
+speech.o: /usr/include/bits/posix_opt.h /usr/include/bits/confname.h
+speech.o: /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h
+speech.o: /usr/include/wchar.h /usr/include/gconv.h
+speech.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+speech.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+speech.o: /usr/include/stdlib.h /opt/gnome/include/glib-2.0/glib.h
+speech.o: /opt/gnome/include/glib-2.0/glib/galloca.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gtypes.h
+speech.o: /opt/gnome/lib/glib-2.0/include/glibconfig.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gmacros.h
+speech.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/float.h
+speech.o: /opt/gnome/include/glib-2.0/glib/garray.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gasyncqueue.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gthread.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gerror.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gquark.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gbacktrace.h /usr/include/signal.h
+speech.o: /usr/include/bits/sigset.h /usr/include/bits/signum.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gcache.h
+speech.o: /opt/gnome/include/glib-2.0/glib/glist.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gmem.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gcompletion.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gconvert.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gdataset.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gdate.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gdir.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gfileutils.h
+speech.o: /opt/gnome/include/glib-2.0/glib/ghash.h
+speech.o: /opt/gnome/include/glib-2.0/glib/ghook.h
+speech.o: /opt/gnome/include/glib-2.0/glib/giochannel.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gmain.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gslist.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gstring.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gunicode.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gmarkup.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gmessages.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gnode.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gpattern.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gprimes.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gqsort.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gqueue.h
+speech.o: /opt/gnome/include/glib-2.0/glib/grand.h
+speech.o: /opt/gnome/include/glib-2.0/glib/grel.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gscanner.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gshell.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gspawn.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gstrfuncs.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gthreadpool.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gtimer.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gtree.h
+speech.o: /opt/gnome/include/glib-2.0/glib/gutils.h
+speech.o: ../speechd/src/clients/libspeechd.h speech.h
+street.o: /usr/include/assert.h /usr/include/features.h
+street.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+street.o: /usr/include/stdio.h
+street.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+street.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+street.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+street.o: /usr/include/_G_config.h /usr/include/wchar.h
+street.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+street.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+street.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+street.o: /usr/include/malloc.h /usr/include/unistd.h
+street.o: /usr/include/bits/posix_opt.h /usr/include/bits/confname.h
+street.o: /opt/gnome/include/glib-2.0/glib.h
+street.o: /opt/gnome/include/glib-2.0/glib/galloca.h
+street.o: /opt/gnome/include/glib-2.0/glib/gtypes.h
+street.o: /opt/gnome/lib/glib-2.0/include/glibconfig.h
+street.o: /opt/gnome/include/glib-2.0/glib/gmacros.h /usr/include/limits.h
+street.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/limits.h
+street.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/float.h
+street.o: /opt/gnome/include/glib-2.0/glib/garray.h
+street.o: /opt/gnome/include/glib-2.0/glib/gasyncqueue.h
+street.o: /opt/gnome/include/glib-2.0/glib/gthread.h
+street.o: /opt/gnome/include/glib-2.0/glib/gerror.h
+street.o: /opt/gnome/include/glib-2.0/glib/gquark.h
+street.o: /opt/gnome/include/glib-2.0/glib/gbacktrace.h /usr/include/signal.h
+street.o: /usr/include/bits/sigset.h /usr/include/bits/signum.h
+street.o: /opt/gnome/include/glib-2.0/glib/gcache.h
+street.o: /opt/gnome/include/glib-2.0/glib/glist.h
+street.o: /opt/gnome/include/glib-2.0/glib/gmem.h
+street.o: /opt/gnome/include/glib-2.0/glib/gcompletion.h
+street.o: /opt/gnome/include/glib-2.0/glib/gconvert.h
+street.o: /opt/gnome/include/glib-2.0/glib/gdataset.h
+street.o: /opt/gnome/include/glib-2.0/glib/gdate.h
+street.o: /opt/gnome/include/glib-2.0/glib/gdir.h
+street.o: /opt/gnome/include/glib-2.0/glib/gfileutils.h
+street.o: /opt/gnome/include/glib-2.0/glib/ghash.h
+street.o: /opt/gnome/include/glib-2.0/glib/ghook.h
+street.o: /opt/gnome/include/glib-2.0/glib/giochannel.h
+street.o: /opt/gnome/include/glib-2.0/glib/gmain.h
+street.o: /opt/gnome/include/glib-2.0/glib/gslist.h
+street.o: /opt/gnome/include/glib-2.0/glib/gstring.h
+street.o: /opt/gnome/include/glib-2.0/glib/gunicode.h
+street.o: /opt/gnome/include/glib-2.0/glib/gmarkup.h
+street.o: /opt/gnome/include/glib-2.0/glib/gmessages.h
+street.o: /opt/gnome/include/glib-2.0/glib/gnode.h
+street.o: /opt/gnome/include/glib-2.0/glib/gpattern.h
+street.o: /opt/gnome/include/glib-2.0/glib/gprimes.h
+street.o: /opt/gnome/include/glib-2.0/glib/gqsort.h
+street.o: /opt/gnome/include/glib-2.0/glib/gqueue.h
+street.o: /opt/gnome/include/glib-2.0/glib/grand.h
+street.o: /opt/gnome/include/glib-2.0/glib/grel.h
+street.o: /opt/gnome/include/glib-2.0/glib/gscanner.h
+street.o: /opt/gnome/include/glib-2.0/glib/gshell.h
+street.o: /opt/gnome/include/glib-2.0/glib/gspawn.h
+street.o: /opt/gnome/include/glib-2.0/glib/gstrfuncs.h
+street.o: /opt/gnome/include/glib-2.0/glib/gthreadpool.h
+street.o: /opt/gnome/include/glib-2.0/glib/gtimer.h
+street.o: /opt/gnome/include/glib-2.0/glib/gtree.h
+street.o: /opt/gnome/include/glib-2.0/glib/gutils.h container.h coord.h
+street.o: map_data.h file.h param.h block.h transform.h point.h route.h
+street.o: street.h street_data.h street_name.h display.h draw_info.h
+street.o: data_window.h data.h tree.h
+street_name.o: /usr/include/stdio.h /usr/include/features.h
+street_name.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+street_name.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+street_name.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+street_name.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+street_name.o: /usr/include/_G_config.h /usr/include/wchar.h
+street_name.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+street_name.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+street_name.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+street_name.o: /usr/include/ctype.h /usr/include/endian.h
+street_name.o: /usr/include/bits/endian.h /usr/include/string.h map_data.h
+street_name.o: street_name.h file.h param.h block.h coord.h transform.h
+street_name.o: point.h data.h tree.h
+test.o: /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h
+test.o: /usr/include/gnu/stubs.h
+test.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+test.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+test.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+test.o: /usr/include/_G_config.h /usr/include/wchar.h
+test.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+test.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+test.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+test.o: search.h map_data.h
+town.o: /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h
+town.o: /usr/include/gnu/stubs.h
+town.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+town.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+town.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+town.o: /usr/include/_G_config.h /usr/include/wchar.h
+town.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+town.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+town.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+town.o: /usr/include/string.h /usr/include/malloc.h display.h point.h coord.h
+town.o: data_window.h map_data.h town.h data.h tree.h block.h transform.h
+town.o: file.h param.h draw_info.h container.h util.h /usr/include/ctype.h
+town.o: /usr/include/endian.h /usr/include/bits/endian.h
+transform.o: /usr/include/assert.h /usr/include/features.h
+transform.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+transform.o: /usr/include/stdio.h
+transform.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+transform.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+transform.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+transform.o: /usr/include/_G_config.h /usr/include/wchar.h
+transform.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+transform.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+transform.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+transform.o: /usr/include/math.h /usr/include/bits/huge_val.h
+transform.o: /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h
+transform.o: /usr/include/limits.h
+transform.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/limits.h coord.h
+transform.o: transform.h point.h
+tree.o: /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h
+tree.o: /usr/include/gnu/stubs.h
+tree.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+tree.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+tree.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+tree.o: /usr/include/_G_config.h /usr/include/wchar.h
+tree.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+tree.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+tree.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+tree.o: /usr/include/string.h file.h param.h map_data.h data.h tree.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gmacros.h
+tst.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gtypes.h
+tst.o: /opt/gnome/lib/glib-2.0/include/glibconfig.h /usr/include/limits.h
+tst.o: /usr/include/features.h /usr/include/sys/cdefs.h
+tst.o: /usr/include/gnu/stubs.h
+tst.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/limits.h
+tst.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/float.h
+tst.o: /opt/gnome/include/glib-2.0/glib.h
+tst.o: /opt/gnome/include/glib-2.0/glib/galloca.h
+tst.o: /opt/gnome/include/glib-2.0/glib/garray.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gasyncqueue.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gthread.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gerror.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gquark.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gbacktrace.h /usr/include/signal.h
+tst.o: /usr/include/bits/sigset.h /usr/include/bits/types.h
+tst.o: /usr/include/bits/wordsize.h /usr/include/bits/typesizes.h
+tst.o: /usr/include/bits/signum.h /opt/gnome/include/glib-2.0/glib/gcache.h
+tst.o: /opt/gnome/include/glib-2.0/glib/glist.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gmem.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gcompletion.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gconvert.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gdataset.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gdate.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gdir.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gfileutils.h
+tst.o: /opt/gnome/include/glib-2.0/glib/ghash.h
+tst.o: /opt/gnome/include/glib-2.0/glib/ghook.h
+tst.o: /opt/gnome/include/glib-2.0/glib/giochannel.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gmain.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gslist.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gstring.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gunicode.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gmarkup.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gmessages.h
+tst.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gnode.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gpattern.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gprimes.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gqsort.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gqueue.h
+tst.o: /opt/gnome/include/glib-2.0/glib/grand.h
+tst.o: /opt/gnome/include/glib-2.0/glib/grel.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gscanner.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gshell.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gspawn.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gstrfuncs.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gthreadpool.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gtimer.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gtree.h
+tst.o: /opt/gnome/include/glib-2.0/glib/gutils.h
+util.o: /usr/include/ctype.h /usr/include/features.h /usr/include/sys/cdefs.h
+util.o: /usr/include/gnu/stubs.h /usr/include/bits/types.h
+util.o: /usr/include/bits/wordsize.h
+util.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+util.o: /usr/include/bits/typesizes.h /usr/include/endian.h
+util.o: /usr/include/bits/endian.h
+vehicle.o: /usr/include/stdio.h /usr/include/features.h
+vehicle.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+vehicle.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+vehicle.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
+vehicle.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+vehicle.o: /usr/include/_G_config.h /usr/include/wchar.h
+vehicle.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+vehicle.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+vehicle.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+vehicle.o: /usr/include/stdlib.h /usr/include/string.h /usr/include/unistd.h
+vehicle.o: /usr/include/bits/posix_opt.h /usr/include/bits/confname.h
+vehicle.o: /usr/include/fcntl.h /usr/include/bits/fcntl.h
+vehicle.o: /usr/include/sys/types.h /usr/include/time.h /usr/include/math.h
+vehicle.o: /usr/include/bits/huge_val.h /usr/include/bits/mathdef.h
+vehicle.o: /usr/include/bits/mathcalls.h /opt/gnome/include/glib-2.0/glib.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/galloca.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gtypes.h
+vehicle.o: /opt/gnome/lib/glib-2.0/include/glibconfig.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gmacros.h /usr/include/limits.h
+vehicle.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/limits.h
+vehicle.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/float.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/garray.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gasyncqueue.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gthread.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gerror.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gquark.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gbacktrace.h
+vehicle.o: /usr/include/signal.h /usr/include/bits/sigset.h
+vehicle.o: /usr/include/bits/signum.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gcache.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/glist.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gmem.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gcompletion.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gconvert.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gdataset.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gdate.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gdir.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gfileutils.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/ghash.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/ghook.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/giochannel.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gmain.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gslist.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gstring.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gunicode.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gmarkup.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gmessages.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gnode.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gpattern.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gprimes.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gqsort.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gqueue.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/grand.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/grel.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gscanner.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gshell.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gspawn.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gstrfuncs.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gthreadpool.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gtimer.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gtree.h
+vehicle.o: /opt/gnome/include/glib-2.0/glib/gutils.h coord.h transform.h
+vehicle.o: point.h statusbar.h vehicle.h
+block.o: coord.h transform.h point.h
+display.o: point.h
+file.o: param.h
+map.o: /opt/gnome/include/glib-2.0/glib.h
+map.o: /opt/gnome/include/glib-2.0/glib/galloca.h
+map.o: /opt/gnome/include/glib-2.0/glib/gtypes.h
+map.o: /opt/gnome/lib/glib-2.0/include/glibconfig.h
+map.o: /opt/gnome/include/glib-2.0/glib/gmacros.h
+map.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+map.o: /usr/include/limits.h /usr/include/features.h /usr/include/sys/cdefs.h
+map.o: /usr/include/gnu/stubs.h
+map.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/limits.h
+map.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/float.h
+map.o: /opt/gnome/include/glib-2.0/glib/garray.h
+map.o: /opt/gnome/include/glib-2.0/glib/gasyncqueue.h
+map.o: /opt/gnome/include/glib-2.0/glib/gthread.h
+map.o: /opt/gnome/include/glib-2.0/glib/gerror.h
+map.o: /opt/gnome/include/glib-2.0/glib/gquark.h
+map.o: /opt/gnome/include/glib-2.0/glib/gbacktrace.h /usr/include/signal.h
+map.o: /usr/include/bits/sigset.h /usr/include/bits/types.h
+map.o: /usr/include/bits/wordsize.h /usr/include/bits/typesizes.h
+map.o: /usr/include/bits/signum.h /opt/gnome/include/glib-2.0/glib/gcache.h
+map.o: /opt/gnome/include/glib-2.0/glib/glist.h
+map.o: /opt/gnome/include/glib-2.0/glib/gmem.h
+map.o: /opt/gnome/include/glib-2.0/glib/gcompletion.h
+map.o: /opt/gnome/include/glib-2.0/glib/gconvert.h
+map.o: /opt/gnome/include/glib-2.0/glib/gdataset.h
+map.o: /opt/gnome/include/glib-2.0/glib/gdate.h
+map.o: /opt/gnome/include/glib-2.0/glib/gdir.h
+map.o: /opt/gnome/include/glib-2.0/glib/gfileutils.h
+map.o: /opt/gnome/include/glib-2.0/glib/ghash.h
+map.o: /opt/gnome/include/glib-2.0/glib/ghook.h
+map.o: /opt/gnome/include/glib-2.0/glib/giochannel.h
+map.o: /opt/gnome/include/glib-2.0/glib/gmain.h
+map.o: /opt/gnome/include/glib-2.0/glib/gslist.h
+map.o: /opt/gnome/include/glib-2.0/glib/gstring.h
+map.o: /opt/gnome/include/glib-2.0/glib/gunicode.h
+map.o: /opt/gnome/include/glib-2.0/glib/gmarkup.h
+map.o: /opt/gnome/include/glib-2.0/glib/gmessages.h
+map.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stdarg.h
+map.o: /opt/gnome/include/glib-2.0/glib/gnode.h
+map.o: /opt/gnome/include/glib-2.0/glib/gpattern.h
+map.o: /opt/gnome/include/glib-2.0/glib/gprimes.h
+map.o: /opt/gnome/include/glib-2.0/glib/gqsort.h
+map.o: /opt/gnome/include/glib-2.0/glib/gqueue.h
+map.o: /opt/gnome/include/glib-2.0/glib/grand.h
+map.o: /opt/gnome/include/glib-2.0/glib/grel.h
+map.o: /opt/gnome/include/glib-2.0/glib/gscanner.h
+map.o: /opt/gnome/include/glib-2.0/glib/gshell.h
+map.o: /opt/gnome/include/glib-2.0/glib/gspawn.h
+map.o: /opt/gnome/include/glib-2.0/glib/gstrfuncs.h
+map.o: /opt/gnome/include/glib-2.0/glib/gthreadpool.h
+map.o: /opt/gnome/include/glib-2.0/glib/gtimer.h
+map.o: /opt/gnome/include/glib-2.0/glib/gtree.h
+map.o: /opt/gnome/include/glib-2.0/glib/gutils.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orbit-types.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/util/orbit-util.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orbit-config.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/util/basic_types.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/util/orbit-genrand.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orb-core-types.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orb-types.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-typecode-type.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-any-type.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-pobj.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-environment-type.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-orb-type.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orbit-object.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-context-type.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-typecode.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/allocators.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-defs.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa-basics.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orbit-interface.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orbit.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orb-core.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/iop-defs.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-orb.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-string.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-environment.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-any.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-object-type.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-object.h
+map.o: /opt/gnome/include/glib-2.0/glib-object.h
+map.o: /opt/gnome/include/glib-2.0/gobject/gboxed.h
+map.o: /opt/gnome/include/glib-2.0/gobject/gtype.h
+map.o: /opt/gnome/include/glib-2.0/gobject/genums.h
+map.o: /opt/gnome/include/glib-2.0/gobject/gobject.h
+map.o: /opt/gnome/include/glib-2.0/gobject/gvalue.h
+map.o: /opt/gnome/include/glib-2.0/gobject/gparam.h
+map.o: /opt/gnome/include/glib-2.0/gobject/gclosure.h
+map.o: /opt/gnome/include/glib-2.0/gobject/gsignal.h
+map.o: /opt/gnome/include/glib-2.0/gobject/gmarshal.h
+map.o: /opt/gnome/include/glib-2.0/gobject/gparamspecs.h
+map.o: /opt/gnome/include/glib-2.0/gobject/gsourceclosure.h
+map.o: /opt/gnome/include/glib-2.0/gobject/gtypemodule.h
+map.o: /opt/gnome/include/glib-2.0/gobject/gtypeplugin.h
+map.o: /opt/gnome/include/glib-2.0/gobject/gvaluearray.h
+map.o: /opt/gnome/include/glib-2.0/gobject/gvaluetypes.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-policy-type.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/corba-context.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/orb-core/orbit-small.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa-defs.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/poa/poa-types.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/poa/orbit-adaptor.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/poa/portableserver-poa-type.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/poa/portableserver-current-type.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/dynamic/dynamic.h
+map.o: /opt/gnome/include/orbit-2.0/orbit/dynamic/dynamic-defs.h
+transform.o: point.h
+util.o: /usr/include/ctype.h /usr/include/features.h /usr/include/sys/cdefs.h
+util.o: /usr/include/gnu/stubs.h /usr/include/bits/types.h
+util.o: /usr/include/bits/wordsize.h
+util.o: /usr/lib/gcc-lib/i586-suse-linux/3.3.3/include/stddef.h
+util.o: /usr/include/bits/typesizes.h /usr/include/endian.h
+util.o: /usr/include/bits/endian.h
diff --git a/Makefile b/Makefile
new file mode 100644
index 00000000..0352d6c4
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,36 @@
+CFLAGS_LOCAL=-I. -I../speechd/src/clients
+CFLAGS=$(CFLAGS_LOCAL) -I/usr/include/linc-1.0 $(shell pkg-config --cflags ORBit-2.0 gtk+-2.0) -g -Wall # -Werror # -O2
+LDLIBS=$(shell pkg-config --libs ORBit-2.0 gtk+-2.0 gtkglext-1.0) fib-1.0/fib.so ../speechd/src/clients/libspeechd.lo
+
+SUBDIRS=plugins fib-1.0 gui graphics
+
+OBJECTS=file.o param.o block.o display.o town.o street.o poly.o transform.o coord.o data_window.o route.o menu.o popup.o vehicle.o log.o command.o tree.o util.o map-common.o map-skels.o map-srv.o destination.o speech.o main.o phrase.o navigation.o cursor.o plugin.o map_data.o street_name.o country.o graphics.o graphics/gtk_gl_ext/gtk_gl_ext.o profile.o compass.o search.o
+
+all: $(SUBDIRS) map mapclient
+
+map: $(OBJECTS) fib-1.0/fib.so gui/gtk/gtk.o graphics/gtk_drawing_area/gtk_drawing_area.o
+ $(CC) -g -o map $(OBJECTS) gui/gtk/gtk.o graphics/gtk_drawing_area/gtk_drawing_area.o $(LDLIBS)
+map-static: $(OBJECTS)
+ $(CC) -g -static -o map-static $(OBJECTS) $(LDLIBS)
+
+mapclient: mapclient.o map-stubs.o map-common.o
+ $(CC) -g -o mapclient mapclient.o map-stubs.o map-common.o $(shell pkg-config --libs ORBit-2.0)
+
+map-common.c map-skels.c map-stubs.c map.h: map.idl
+ orbit-idl-2 --skeleton-impl map.idl
+
+clean:
+ rm *.o map
+
+
+.PHONY: $(SUBDIRS)
+$(SUBDIRS):
+ cd $@ && make
+
+depend: .depend
+
+.depend: *.c *.h
+ [ -f .depend ] || touch -r Makefile .depend
+ makedepend -f .depend -- $(CFLAGS) -- *.c *.h
+
+include .depend
diff --git a/block.c b/block.c
new file mode 100644
index 00000000..c48ea3ff
--- /dev/null
+++ b/block.c
@@ -0,0 +1,209 @@
+#include <stdio.h>
+#include <string.h>
+#include <malloc.h>
+#include <assert.h>
+#include "file.h"
+#include "block.h"
+#include "data.h"
+
+
+struct file_private {
+ int binarytree;
+};
+
+struct block_index_item {
+ unsigned long blocknum;
+ unsigned long blocks;
+};
+
+struct block_index {
+ unsigned long blocks;
+ unsigned long size;
+ unsigned long next;
+ struct block_index_item list[0];
+};
+
+
+struct block *
+block_get(unsigned char **p)
+{
+ struct block *ret=(struct block *)(*p);
+ *p += sizeof(*ret);
+ return ret;
+}
+
+struct block *
+block_get_byindex(struct file *file, int idx, unsigned char **p_ret)
+{
+ struct block_index *blk_idx;
+ int blk_num,max;
+
+ blk_idx=(struct block_index *)(file->begin+0x1000);
+ max=(blk_idx->size-sizeof(struct block_index))/sizeof(struct block_index_item);
+ while (idx >= max) {
+ blk_idx=(struct block_index *)(file->begin+blk_idx->next*512);
+ idx-=max;
+ }
+ blk_num=blk_idx->list[idx].blocknum;
+
+ *p_ret=file->begin+blk_num*512;
+ return block_get(p_ret);
+}
+
+int
+block_binarytree_walk(struct block **block, unsigned char **p, struct coord *c, int ign, struct block_info *blk_inf, struct transformation *t,
+ void *data, void(*func)(struct block_info *, unsigned char *, unsigned char *, void *))
+{
+ struct coord ca[2],cb[2];
+ struct block *blk;
+ int blk_num,val,dx,dy;
+ int ret=0;
+
+ ca[0].x=c[0].x;
+ ca[0].y=c[0].y;
+ ca[1].x=c[1].x;
+ ca[1].y=c[1].y;
+ cb[0].x=c[0].x;
+ cb[0].y=c[0].y;
+ cb[1].x=c[1].x;
+ cb[1].y=c[1].y;
+
+ if (*p >= (unsigned char *)(*block)+(*block)->size) {
+ *block=block_get_byindex(blk_inf->file, (*block)->next, p);
+ *p-=20;
+ }
+ blk_num=get_long(p);
+ val=get_long(p);
+
+ if (blk_num != -1)
+ ret++;
+
+ if (blk_num != -1 && (t == NULL || is_visible(t, c))) {
+ unsigned char *t,*end;
+ blk=block_get_byindex(blk_inf->file, blk_num, &t);
+ if (c[0].x != blk->c[0].x || c[0].y != blk->c[0].y || c[1].x != blk->c[1].x || c[1].y != blk->c[1].y) {
+ printf("ERROR3\n");
+ printf("!= 0x%lx,0x%lx-0x%lx,0x%lx\n", blk->c[0].x,blk->c[0].y,blk->c[1].x,blk->c[1].y);
+ }
+ end=(unsigned char *)blk;
+ end+=blk->size;
+ blk_inf->block=blk;
+ blk_inf->block_number=blk_num;
+ (*func)(blk_inf, t, end, data);
+ }
+
+ if (val != -1) {
+ dx=c[1].x-c[0].x;
+ dy=c[0].y-c[1].y;
+ if (dy > dx) {
+ ca[0].y=val;
+ cb[1].y=val+1;
+ } else {
+ ca[1].x=val;
+ cb[0].x=val+1;
+ }
+ ret+=block_binarytree_walk(block, p, ca, ign, blk_inf, t, data, func);
+ ret+=block_binarytree_walk(block, p, cb, ign, blk_inf, t, data, func);
+ }
+ return ret;
+}
+
+void
+block_file_private_setup(struct file *file)
+{
+ int len;
+ unsigned char *p,*str,*t;
+ struct file_private *file_priv;
+
+ file_priv=malloc(sizeof(*file_priv));
+ file->private=file_priv;
+ memset(file_priv, 0, sizeof(*file_priv));
+
+ p=file->begin+0x0c;
+ while (*p) {
+ str=get_string(&p);
+ len=get_long(&p);
+ t=p;
+ if (! strcmp(str,"binaryTree")) {
+ file_priv->binarytree=get_long(&t);
+ }
+ p+=len;
+ }
+}
+
+void
+block_foreach_visible_linear(struct block_info *blk_inf, struct transformation *t, void *data,
+ void(*func)(struct block_info *blk_inf, unsigned char *, unsigned char *, void *))
+{
+ unsigned char *p,*start,*end;
+ struct block *blk;
+
+ blk_inf->block_number=0;
+ p=blk_inf->file->begin+0x2000;
+ while (p < blk_inf->file->end) {
+ blk_inf->block_number++;
+ start=p;
+ end=p;
+ blk=block_get(&p);
+ end+=blk->size;
+ if (blk->count == -1)
+ break;
+ if (t == NULL || is_visible(t, blk->c)) {
+ blk_inf->block=blk;
+ (*func)(blk_inf, p, end, data);
+ }
+ p=start+blk->blocks*512;
+ }
+}
+
+void
+block_foreach_visible(struct block_info *blk_inf, struct transformation *t, int limit, void *data,
+ void(*func)(struct block_info *, unsigned char *, unsigned char *, void *))
+{
+ struct file_private *file_priv=blk_inf->file->private;
+
+ if (! file_priv) {
+ block_file_private_setup(blk_inf->file);
+ file_priv=blk_inf->file->private;
+ }
+ if (! file_priv->binarytree) {
+ block_foreach_visible_linear(blk_inf, t, data, func);
+ } else {
+ unsigned char *p,*p2;
+ int dummy1,dummy2,xy,i,count;
+ struct block *block=block_get_byindex(blk_inf->file, file_priv->binarytree, &p);
+ p2=p;
+ dummy1=get_long(&p2);
+ if (block->count != -1 || dummy1 != -1) {
+ printf("ERROR2 0x%x\n", block->count);
+ }
+ xy=1;
+ p=p2;
+ for (i = 0 ; i < limit ; i++) {
+ p2=p;
+ dummy1=get_long(&p2);
+ dummy2=get_long(&p2);
+ assert((dummy1 == -1 && dummy2 == -1) || i < 32) ;
+ count=block_binarytree_walk(&block, &p, block->c, 0, blk_inf, t, data, func);
+ }
+ }
+}
+
+int
+block_get_param(struct block_info *blk_inf, struct param_list *param, int count)
+{
+ int i=count;
+ param_add_hex("Number", blk_inf->block_number, &param, &count);
+ param_add_hex("Addr", (unsigned char *)blk_inf->block-blk_inf->file->begin, &param, &count);
+ param_add_hex("Blocks", blk_inf->block->blocks, &param, &count);
+ param_add_hex("Size", blk_inf->block->size, &param, &count);
+ param_add_hex("Next", blk_inf->block->next, &param, &count);
+ param_add_hex_sig("L", blk_inf->block->c[0].x, &param, &count);
+ param_add_hex_sig("T", blk_inf->block->c[0].y, &param, &count);
+ param_add_hex_sig("R", blk_inf->block->c[1].x, &param, &count);
+ param_add_hex_sig("B", blk_inf->block->c[1].y, &param, &count);
+ param_add_hex("W", blk_inf->block->c[1].x-blk_inf->block->c[0].x, &param, &count);
+ param_add_hex("H", blk_inf->block->c[0].y-blk_inf->block->c[1].y, &param, &count);
+ param_add_hex("Count", blk_inf->block->count, &param, &count);
+ return i-count;
+}
diff --git a/block.h b/block.h
new file mode 100644
index 00000000..a65fe935
--- /dev/null
+++ b/block.h
@@ -0,0 +1,30 @@
+#include "coord.h"
+#include "transform.h"
+
+struct block {
+ unsigned long blocks;
+ unsigned long size;
+ unsigned long next;
+ struct coord c[2];
+ int count;
+};
+
+struct block_info {
+ struct map_data *mdata;
+ struct file *file;
+ struct block *block;
+ int block_number;
+};
+
+struct segment {
+ struct block_info blk_inf;
+ void *data[4];
+};
+
+struct param_list;
+
+struct block * block_get(unsigned char **p);
+void block_foreach_visible(struct block_info *blk_inf, struct transformation *t, int limit, void *data,
+ void(*func)(struct block_info *blk_inf, unsigned char *, unsigned char *, void *));
+int block_get_param(struct block_info *blk_inf, struct param_list *param, int count);
+struct block *block_get_byindex(struct file *file, int idx, unsigned char **p_ret);
diff --git a/command.c b/command.c
new file mode 100644
index 00000000..88d26a36
--- /dev/null
+++ b/command.c
@@ -0,0 +1,143 @@
+#include <stdio.h>
+#include <string.h>
+#include "coord.h"
+#include "town.h"
+#include "street.h"
+
+/* Phonetisch
+ "KLEIN " -> CL
+ (x)(x)->x
+ EI:AY
+ E:-
+ F:V
+ G:C
+ H:-
+ I:Y
+ J:Y
+ K:C
+ T:D
+ W:V
+*/
+
+struct tree_hdr {
+ unsigned int addr;
+ unsigned int size;
+ unsigned int low;
+};
+
+struct tree_leaf {
+ unsigned int low;
+ unsigned int data;
+ unsigned char text[0];
+};
+
+int
+compare(char *s1, char *s2)
+{
+ char s1_exp, s2_exp;
+ for (;;) {
+ s1_exp=*s1++;
+ s2_exp=*s2++;
+ if (! s1_exp && ! s2_exp)
+ return 0;
+ if (s1_exp == 'A' && *s1 == 'E') { s1_exp='Ä'; s1++; }
+ if (s1_exp == 'O' && *s1 == 'E') { s1_exp='Ö'; s1++; }
+ if (s1_exp == 'U' && *s1 == 'E') { s1_exp='Ü'; s1++; }
+ if (s2_exp == 'A' && *s2 == 'E') { s2_exp='Ä'; s2++; }
+ if (s2_exp == 'O' && *s2 == 'E') { s2_exp='Ö'; s2++; }
+ if (s2_exp == 'U' && *s2 == 'E') { s2_exp='Ü'; s2++; }
+ if (s1_exp != s2_exp)
+ return s1_exp-s2_exp;
+ }
+#if 0
+ for (;;) {
+ while (*s1 && *s1 == *s2) {
+ s1++;
+ s2++;
+ }
+ if (! *s1 && ! *s2)
+ return 0;
+ if (! *s1)
+ return -1;
+ if (! *s2)
+ return 1;
+ if (*s1 < *s2 && *s2 < 0x80)
+ return -1;
+ if (*s1 > *s2 && *s1 < 0x80)
+ return 1;
+ s1_exp=*s1;
+ s2_exp=*s2;
+ if (s1_exp >= 0x80)
+ s1_exp=' ';
+ if (s2_exp >= 0x80)
+ s2_exp=' ';
+#if 0
+ if (*s1 == (unsigned char)'Ä') s1_exp='A';
+ if (*s1 == (unsigned char)'Ö') s1_exp='O';
+ if (*s1 == (unsigned char)'Ü') s1_exp='U';
+ if (*s1 == (unsigned char)'ä') s1_exp='a';
+ if (*s1 == (unsigned char)'ö') s1_exp='o';
+ if (*s1 == (unsigned char)'ü') s1_exp='u';
+ if (*s1 == (unsigned char)'ß') s1_exp='s';
+ if (*s2 == (unsigned char)'Ä') s2_exp='A';
+ if (*s2 == (unsigned char)'Ö') s2_exp='O';
+ if (*s2 == (unsigned char)'Ü') s2_exp='U';
+ if (*s2 == (unsigned char)'ä') s2_exp='a';
+ if (*s2 == (unsigned char)'ö') s2_exp='o';
+ if (*s2 == (unsigned char)'ü') s2_exp='u';
+ if (*s2 == (unsigned char)'ß') s2_exp='s';
+#endif
+ if (s1_exp < s2_exp)
+ return -1;
+ if (s1_exp > s2_exp)
+ return 1;
+ printf("Problem %c vs %c\n", *s1, *s2);
+ exit(1);
+ }
+#endif
+}
+void
+command_goto(struct container *co, const char *arg)
+{
+#if 0
+ struct container *co=map->container;
+ struct town_list *list,*curr,*best=NULL;
+ int order=256;
+ int argc=0;
+ unsigned long x,y,scale;
+ char args[strlen(arg)+1];
+ char *argv[strlen(arg)+1];
+ char *tok;
+
+
+ strcpy(args, arg);
+ tok=strtok(args, " ");
+ while (tok) {
+ argv[argc++]=tok;
+ tok=strtok(NULL," ");
+ }
+
+ list=NULL;
+ town_search_by_name(&list, co->map_data, argv[0], 0, 10000);
+ town_get_by_index(co->map_data, 0x311d54cb);
+ curr=list;
+ while (curr) {
+ if (curr->town->order < order) {
+ order=curr->town->order;
+ best=curr;
+ }
+ curr=curr->next;
+ }
+ if (best) {
+ printf("'%s' '%s' '%s' '%s'\n", best->town->name, best->town->district, best->town->postal_code1, best->town->postal_code2);
+#if 0
+ street_search_by_name(class->map_data, best->town->country, best->town->street_assoc, 0, argv[1]);
+#endif
+ map_get_view(map, &x, &y, &scale);
+ x=best->town->c->x;
+ y=best->town->c->y;
+ map_set_view(map, x, y, scale);
+ }
+ town_list_free(list);
+#endif
+}
diff --git a/command.h b/command.h
new file mode 100644
index 00000000..5082fa04
--- /dev/null
+++ b/command.h
@@ -0,0 +1 @@
+void command_goto(struct container *co, const char *arg);
diff --git a/compass.c b/compass.c
new file mode 100644
index 00000000..cbfc9c68
--- /dev/null
+++ b/compass.c
@@ -0,0 +1,122 @@
+#include <math.h>
+#include <stdio.h>
+#include <glib.h>
+#include "point.h"
+#include "coord.h"
+#include "graphics.h"
+#include "transform.h"
+#include "route.h"
+#include "vehicle.h"
+#include "container.h"
+
+struct compass {
+ struct graphics *gr;
+ struct graphics_gc *bg;
+ struct graphics_gc *white;
+ struct graphics_gc *green;
+ struct graphics_font *font;
+};
+
+static void
+transform_rotate(struct point *center, int angle, struct point *p, int count)
+{
+ int i,x,y;
+ double dx,dy;
+ for (i = 0 ; i < count ; i++)
+ {
+ dx=sin(M_PI*angle/180.0);
+ dy=cos(M_PI*angle/180.0);
+ x=dy*p->x-dx*p->y;
+ y=dx*p->x+dy*p->y;
+
+ p->x=center->x+x;
+ p->y=center->y+y;
+ p++;
+ }
+}
+
+static void
+handle(struct graphics *gr, struct graphics_gc *gc, struct point *p, int r, int dir)
+{
+ struct point ph[3];
+ int l=r*0.4;
+
+ ph[0].x=0;
+ ph[0].y=r;
+ ph[1].x=0;
+ ph[1].y=-r;
+ transform_rotate(p, dir, ph, 2);
+ gr->draw_lines(gr, gc, ph, 2);
+ ph[0].x=-l;
+ ph[0].y=-r+l;
+ ph[1].x=0;
+ ph[1].y=-r;
+ ph[2].x=l;
+ ph[2].y=-r+l;
+ transform_rotate(p, dir, ph, 3);
+ gr->draw_lines(gr, gc, ph, 3);
+}
+
+void
+compass_draw(struct compass *comp, struct container *co)
+{
+ struct point p;
+ struct coord *pos, *dest;
+ double *vehicle_dir,dir,distance;
+ int dx,dy;
+ char buffer[16];
+
+ vehicle_dir=vehicle_dir_get(co->vehicle);
+ comp->gr->draw_mode(comp->gr, draw_mode_begin);
+ p.x=0;
+ p.y=0;
+ comp->gr->draw_rectangle(comp->gr, comp->bg, &p, 60, 80);
+ p.x=30;
+ p.y=30;
+ comp->gr->draw_circle(comp->gr, comp->white, &p, 50);
+ handle(comp->gr, comp->white, &p, 20, -*vehicle_dir);
+ dest=route_get_destination(co->route);
+ if (dest) {
+ pos=vehicle_pos_get(co->vehicle);
+ dx=dest->x-pos->x;
+ dy=dest->y-pos->y;
+ dir=atan2(dx,dy)*180.0/M_PI;
+ printf("dx %d dy %d dir=%f vehicle_dir=%f\n", dx, dy, dir, *vehicle_dir);
+ dir-=*vehicle_dir;
+ handle(comp->gr, comp->green, &p, 20, dir);
+ p.x=8;
+ p.y=72;
+ distance=transform_distance(pos, dest)/1000.0;
+ if (distance >= 100)
+ sprintf(buffer,"%.0f km", distance);
+ else if (distance >= 10)
+ sprintf(buffer,"%.1f km", distance);
+ else
+ sprintf(buffer,"%.2f km", distance);
+
+ comp->gr->draw_text(comp->gr, comp->green, NULL, comp->font, buffer, &p, 0x10000, 0);
+ }
+ comp->gr->draw_mode(comp->gr, draw_mode_end);
+}
+
+struct compass *
+compass_new(struct container *co)
+{
+ struct compass *this=g_new0(struct compass, 1);
+ struct point p;
+ p.x=10;
+ p.y=10;
+ this->gr=co->gra->overlay_new(co->gra, &p, 60, 80);
+ this->bg=this->gr->gc_new(this->gr);
+ this->gr->gc_set_foreground(this->bg, 0, 0, 0);
+ this->white=this->gr->gc_new(this->gr);
+ this->gr->gc_set_foreground(this->white, 0xffff, 0xffff, 0xffff);
+ this->gr->gc_set_linewidth(this->white, 2);
+ this->green=this->gr->gc_new(this->gr);
+ this->gr->gc_set_foreground(this->green, 0x0, 0xffff, 0x0);
+ this->gr->gc_set_linewidth(this->green, 2);
+
+ this->font=this->gr->font_new(this->gr, 200);
+ compass_draw(this, co);
+ return this;
+}
diff --git a/compass.h b/compass.h
new file mode 100644
index 00000000..3bc8ad7b
--- /dev/null
+++ b/compass.h
@@ -0,0 +1,2 @@
+struct compass * compass_new(struct container *co);
+void compass_draw(struct compass *comp, struct container *co);
diff --git a/container.h b/container.h
new file mode 100644
index 00000000..33433e4a
--- /dev/null
+++ b/container.h
@@ -0,0 +1,69 @@
+enum display_index {
+ display_sea=0,
+ display_wood,
+ display_other,
+ display_other1,
+ display_other2,
+ display_other3,
+ display_water,
+ display_rail,
+ display_street,
+ display_street1,
+ display_street2,
+ display_street3,
+ display_street_no_pass,
+ display_street_route,
+ display_street_route_static,
+ display_town,
+ display_town1,
+ display_town2,
+ display_town3,
+ display_town4,
+ display_town5,
+ display_town6,
+ display_town7,
+ display_town8,
+ display_town9,
+ display_town10,
+ display_town11,
+ display_town12,
+ display_town13,
+ display_town14,
+ display_town15,
+ display_bti,
+ display_poi,
+ display_end
+};
+
+enum data_window_type {
+ data_window_type_block=0,
+ data_window_type_town,
+ data_window_type_poly,
+ data_window_type_street,
+ data_window_type_point,
+ data_window_type_end
+};
+
+struct map_flags {
+ int orient_north;
+ int track;
+};
+
+struct container {
+ struct window *win;
+ struct transformation *trans;
+ struct graphics *gra;
+ struct compass *compass;
+ struct display_list *disp[display_end];
+ struct map_data *map_data;
+ struct menu *menu;
+ struct toolbar *toolbar;
+ struct statusbar *statusbar;
+ struct route *route;
+ struct cursor *cursor;
+ struct speech *speech;
+ struct vehicle *vehicle;
+ struct data_window *data_window[data_window_type_end];
+ struct map_flags *flags;
+ struct _GtkMap *map;
+};
diff --git a/coord.c b/coord.c
new file mode 100644
index 00000000..8e792db8
--- /dev/null
+++ b/coord.c
@@ -0,0 +1,9 @@
+#include "coord.h"
+
+struct coord *
+coord_get(unsigned char **p)
+{
+ struct coord *ret=(struct coord *)(*p);
+ *p += sizeof(*ret);
+ return ret;
+}
diff --git a/coord.h b/coord.h
new file mode 100644
index 00000000..885c7919
--- /dev/null
+++ b/coord.h
@@ -0,0 +1,21 @@
+#ifndef COORD_H
+#define COORD_H
+
+struct coord {
+ long x;
+ long y;
+};
+
+struct coord_d {
+ double x;
+ double y;
+};
+
+struct coord_geo {
+ double lng;
+ double lat;
+};
+
+struct coord * coord_get(unsigned char **p);
+
+#endif
diff --git a/country.c b/country.c
new file mode 100644
index 00000000..4f3a5d00
--- /dev/null
+++ b/country.c
@@ -0,0 +1,94 @@
+#include <string.h>
+#include <stdio.h>
+#include <glib.h>
+#include "country.h"
+
+struct country country[]= {
+ {16 ,"RUS", "RU", "RUS", "Rußland"},
+ {20 ,"ET", "EG", "EGY", "Ägypten"},
+ {30 ,"GR", "GR", "GRC", "Griechenland"},
+ {31 ,"NL", "NL", "NLD", "Niederlande"},
+ {32 ,"B", "BE", "BEL", "Belgien"},
+ {33 ,"F", "FR", "FRA", "Frankreich"},
+ {34 ,"E", "ES", "ESP", "Spanien"},
+ {36 ,"H", "HU", "HUN", "Ungarn"},
+ {39 ,"I", "IT", "ITA", "Italien"},
+ {40 ,"RO", "RO", "ROM", "Rumänien"},
+ {41 ,"CH", "CH", "CHE", "Schweiz"},
+ {43 ,"A", "AT", "AUT", "Österreich"},
+ {44 ,"GB", "GB", "GBR", "Grossbritannien"},
+ {45 ,"DK", "DK", "DNK", "Dänemark"},
+ {47 ,"N", "NO", "NOR", "Norwegen"},
+ {49 ,"D", "DE", "DEU", "Deutschland"},
+ {51 ,"P", "PT", "PRT", "Portugal"},
+ {52 ,"L", "LU", "LUX", "Luxemburg"},
+ {71 ,"LAR", "LY", "LYB", "Libyen"},
+ {76 ,"MA", "MA", "MAR", "Marokko"},
+ {78 ,"TN", "TN", "TUN", "Tunesien"},
+};
+
+struct country *
+country_get_by_id(int id)
+{
+ int i;
+ for (i=0 ; i < sizeof(country)/sizeof(struct country); i++) {
+ if (id == country[i].id) {
+ return &country[i];
+ }
+ }
+ return NULL;
+}
+
+static int
+compare(const char *name1, const char *name2, int len, int partial)
+{
+ if (partial)
+ return strncasecmp(name1, name2, len);
+ else
+ return strcasecmp(name1, name2);
+}
+
+static int
+search(int offset, const char *name, int partial, int (*func)(struct country *cou, void *data), void *data)
+{
+ char *col;
+ int i,ret,len=strlen(name);
+ int debug=0;
+
+ for (i=0 ; i < sizeof(country)/sizeof(struct country); i++) {
+ col=G_STRUCT_MEMBER(char *,country+i,offset);
+ if (debug)
+ printf("comparing '%s'\n", col);
+ if (!compare(col, name, len, partial)) {
+ ret=(*func)(&country[i], data);
+ if (ret)
+ return 1;
+ }
+ col+=sizeof(struct country);
+ }
+ return 0;
+}
+
+int
+country_search_by_name(const char *name, int partial, int (*func)(struct country *cou, void *data), void *data)
+{
+ return search(G_STRUCT_OFFSET(struct country, name), name, partial, func, data);
+}
+
+int
+country_search_by_car(const char *name, int partial, int (*func)(struct country *cou, void *data), void *data)
+{
+ return search(G_STRUCT_OFFSET(struct country, car), name, partial, func, data);
+}
+
+int
+country_search_by_iso2(const char *name, int partial, int (*func)(struct country *cou, void *data), void *data)
+{
+ return search(G_STRUCT_OFFSET(struct country, iso2), name, partial, func, data);
+}
+
+int
+country_search_by_iso3(const char *name, int partial, int (*func)(struct country *cou, void *data), void *data)
+{
+ return search(G_STRUCT_OFFSET(struct country, iso3), name, partial, func, data);
+}
diff --git a/country.h b/country.h
new file mode 100644
index 00000000..616a6c26
--- /dev/null
+++ b/country.h
@@ -0,0 +1,12 @@
+struct country {
+ int id;
+ char *car;
+ char *iso2;
+ char *iso3;
+ char *name;
+};
+struct country * country_get_by_id(int id);
+int country_search_by_name(const char *name, int partial, int (*func)(struct country *cou, void *data), void *data);
+int country_search_by_car(const char *name, int partial, int (*func)(struct country *cou, void *data), void *data);
+int country_search_by_iso2(const char *name, int partial, int (*func)(struct country *cou, void *data), void *data);
+int country_search_by_iso3(const char *name, int partial, int (*func)(struct country *cou, void *data), void *data);
diff --git a/cursor.c b/cursor.c
new file mode 100644
index 00000000..1f1d99e8
--- /dev/null
+++ b/cursor.c
@@ -0,0 +1,196 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <math.h>
+#include <glib.h>
+#include "coord.h"
+#include "transform.h"
+#include "graphics.h"
+#include "statusbar.h"
+#include "menu.h"
+#include "vehicle.h"
+#include "container.h"
+
+
+#include "route.h"
+
+struct cursor {
+ struct container *co;
+ struct graphics_gc *cursor_gc;
+ struct point cursor_pnt;
+};
+
+struct coord *
+cursor_pos_get(void *t)
+{
+ struct cursor *this=t;
+ return vehicle_pos_get(this->co->vehicle);
+}
+
+static void
+cursor_draw(struct cursor *this, struct point *pnt, double *speed, double *dir)
+{
+ int x=this->cursor_pnt.x;
+ int y=this->cursor_pnt.y;
+ int r=12,lw=2;
+ double dx,dy;
+ double fac1,fac2;
+ int dir_i=*dir-this->co->trans->angle;
+ struct point cpnt[3];
+ struct graphics *gra=this->co->gra;
+
+ if (pnt && x == pnt->x && y == pnt->y)
+ return;
+ cpnt[0]=this->cursor_pnt;
+ cpnt[0].x-=r+lw;
+ cpnt[0].y-=r+lw;
+ gra->draw_restore(gra, &cpnt[0], (r+lw)*2, (r+lw)*2);
+ if (pnt) {
+ gra->draw_mode(gra, draw_mode_cursor);
+ this->cursor_pnt=*pnt;
+ x=pnt->x;
+ y=pnt->y;
+ cpnt[0].x=x;
+ cpnt[0].y=y;
+ gra->draw_circle(gra, this->cursor_gc, &cpnt[0], r*2);
+ if (*speed > 2.5) {
+ dx=sin(M_PI*dir_i/180);
+ dy=-cos(M_PI*dir_i/180);
+
+ fac1=0.7*r;
+ fac2=0.4*r;
+ cpnt[0].x=x-dx*fac1+dy*fac2;
+ cpnt[0].y=y-dy*fac1-dx*fac2;
+ cpnt[1].x=x+dx*r;
+ cpnt[1].y=y+dy*r;
+ cpnt[2].x=x-dx*fac1-dy*fac2;
+ cpnt[2].y=y-dy*fac1+dx*fac2;
+ gra->draw_lines(gra, this->cursor_gc, cpnt, 3);
+ } else {
+ cpnt[1]=cpnt[0];
+ gra->draw_lines(gra, this->cursor_gc, cpnt, 2);
+ }
+ gra->draw_mode(gra, draw_mode_end);
+ }
+}
+
+static void
+cursor_map_reposition_screen(struct cursor *this, struct coord *c, double *dir, int x_new, int y_new)
+{
+ struct coord c_new;
+ struct transformation tr;
+ struct point pnt;
+ unsigned long scale;
+ long x,y;
+ int dir_i;
+ struct container *co=this->co;
+
+ if (dir)
+ dir_i=*dir;
+ else
+ dir_i=0;
+
+ pnt.x=co->trans->width-x_new;
+ pnt.y=co->trans->height-y_new;
+ graphics_get_view(co, &x, &y, &scale);
+ tr=*this->co->trans;
+ transform_setup(&tr, c->x, c->y, scale, dir_i);
+ transform_reverse(&tr, &pnt, &c_new);
+ printf("%lx %lx vs %lx %lx\n", c->x, c->y, c_new.x, c_new.y);
+ x=c_new.x;
+ y=c_new.y;
+ transform_set_angle(co->trans,dir_i);
+ graphics_set_view(co, &x, &y, &scale);
+}
+
+static void
+cursor_map_reposition(struct cursor *this, struct coord *c, double *dir)
+{
+ unsigned long scale;
+ long x,y;
+
+ if (this->co->flags->orient_north) {
+ graphics_set_view(this->co, &c->x, &c->y, NULL);
+ } else {
+ cursor_map_reposition_screen(this, c, dir, this->co->trans->width/2, this->co->trans->height*0.8);
+ }
+}
+
+static int
+cursor_map_reposition_boundary(struct cursor *this, struct coord *c, double *dir, struct point *pnt)
+{
+ struct point pnt_new;
+ struct transformation *t=this->co->trans;
+
+ pnt_new.x=-1;
+ if (pnt->x < 0.1*t->width) {
+ pnt_new.x=0.8*t->width;
+ pnt_new.y=t->height/2;
+ }
+ if (pnt->x > 0.9*t->width) {
+ pnt_new.x=0.2*t->width;
+ pnt_new.y=t->height/2;
+ }
+ if (pnt->y < (this->co->flags->orient_north ? 0.1 : 0.5)*t->height) {
+ pnt_new.x=t->width/2;
+ pnt_new.y=0.8*t->height;
+ }
+ if (pnt->y > 0.9*t->height) {
+ pnt_new.x=t->width/2;
+ pnt_new.y=0.2*t->height;
+ }
+ if (pnt_new.x != -1) {
+ if (this->co->flags->orient_north) {
+ cursor_map_reposition_screen(this, c, NULL, pnt_new.x, pnt_new.y);
+ } else {
+ cursor_map_reposition(this, c, dir);
+ }
+ return 1;
+ }
+ return 0;
+}
+
+void
+cursor_update(struct cursor *this)
+{
+ struct point pnt;
+ struct coord *pos;
+ struct vehicle *v=this->co->vehicle;
+ double *dir;
+
+ if (v) {
+ pos=vehicle_pos_get(v);
+ dir=vehicle_dir_get(v);
+ route_set_position(this->co->route, cursor_pos_get(this->co->cursor));
+ if (!transform(this->co->trans, pos, &pnt)) {
+ cursor_map_reposition(this, pos, dir);
+ transform(this->co->trans, pos, &pnt);
+ }
+ if (pnt.x < 0 || pnt.y < 0 || pnt.x >= this->co->trans->width || pnt.y >= this->co->trans->height) {
+ cursor_map_reposition(this, pos, dir);
+ transform(this->co->trans, pos, &pnt);
+ }
+ if (cursor_map_reposition_boundary(this, pos, dir, &pnt))
+ transform(this->co->trans, pos, &pnt);
+ cursor_draw(this, &pnt, vehicle_speed_get(v), vehicle_dir_get(v));
+ }
+extern void compass_draw();
+ compass_draw(this->co->compass, this->co);
+}
+
+extern void *vehicle;
+
+struct cursor *
+cursor_new(struct container *co)
+{
+ struct cursor *this=g_new(struct cursor,1);
+ this->co=co;
+ this->cursor_gc=co->gra->gc_new(co->gra);
+ co->gra->gc_set_foreground(this->cursor_gc, 0x0000, 0x0000, 0xffff);
+ co->gra->gc_set_linewidth(this->cursor_gc, 2);
+ vehicle_callback(cursor_update, this);
+ return this;
+}
diff --git a/cursor.h b/cursor.h
new file mode 100644
index 00000000..46114875
--- /dev/null
+++ b/cursor.h
@@ -0,0 +1,5 @@
+struct cursor;
+struct container;
+
+struct coord * cursor_pos_get(struct cursor *this);
+struct cursor *cursor_new(struct container *co);
diff --git a/data.h b/data.h
new file mode 100644
index 00000000..1f054333
--- /dev/null
+++ b/data.h
@@ -0,0 +1,39 @@
+static inline unsigned char
+get_char(unsigned char **p)
+{
+ return *((*p)++);
+}
+
+static inline unsigned short
+get_short(unsigned char **p) {
+ unsigned long ret;
+ ret=*((unsigned short *)*p);
+ *p+=sizeof(unsigned short);
+ return ret;
+}
+
+static inline unsigned long
+get_triple(unsigned char **p) {
+ unsigned long ret;
+ ret=get_short(p);
+ ret|=*((*p)++) << 16;
+ return ret;
+}
+
+
+static inline unsigned long
+get_long(unsigned char **p) {
+ unsigned long ret;
+ ret=*((unsigned int *)*p);
+ *p+=sizeof(unsigned int);
+ return ret;
+}
+
+static inline char *
+get_string(unsigned char **p)
+{
+ char *ret=*p;
+ while (**p) (*p)++;
+ (*p)++;
+ return ret;
+}
diff --git a/data_window.c b/data_window.c
new file mode 100644
index 00000000..dfcddcc2
--- /dev/null
+++ b/data_window.c
@@ -0,0 +1,104 @@
+#include <malloc.h>
+#include <stdio.h>
+#include <gtk/gtk.h>
+#include "param.h"
+#include "data_window.h"
+#include "data_window_int.h"
+
+struct data_window *
+data_window(char *name, struct window *parent, void(*callback)(struct data_window *, char **cols))
+{
+ struct data_window *win;
+
+ win=malloc(sizeof(*win));
+ win->window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_default_size(GTK_WINDOW(win->window), 320, 200);
+ gtk_window_set_title(GTK_WINDOW(win->window), name);
+
+ win->scrolled_window = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (win->scrolled_window),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
+ gtk_container_add(GTK_CONTAINER(win->window), win->scrolled_window);
+
+ win->clist=NULL;
+ win->callback=callback;
+ if (parent)
+ gtk_window_set_transient_for(GTK_WINDOW((GtkWidget *)(win->window)), GTK_WINDOW(parent));
+ gtk_widget_show_all(win->window);
+ return win;
+}
+
+void
+data_window_begin(struct data_window *win)
+{
+ if (win && win->clist) {
+ gtk_clist_clear(GTK_CLIST(win->clist));
+ gtk_clist_freeze(GTK_CLIST(win->clist));
+ }
+}
+
+static void
+click_column(GtkCList *clist, int column)
+{
+ if (column != clist->sort_column) {
+ gtk_clist_set_sort_type(clist, GTK_SORT_ASCENDING);
+ gtk_clist_set_sort_column(clist, column);
+ } else {
+ if (clist->sort_type == GTK_SORT_ASCENDING)
+ gtk_clist_set_sort_type(clist, GTK_SORT_DESCENDING);
+ else
+ gtk_clist_set_sort_type(clist, GTK_SORT_ASCENDING);
+ }
+ gtk_clist_sort(clist);
+}
+
+static void
+select_row(GtkCList *clist, int row, int column, GdkEventButton *event, struct data_window *win)
+{
+ int i;
+ if (win->callback) {
+ char *cols[20];
+ for (i=0;i<20;i++) {
+ gtk_clist_get_text(clist, row, i, &cols[i]);
+ }
+ win->callback(win, cols);
+ }
+}
+
+void
+data_window_add(struct data_window *win, struct param_list *param, int count)
+{
+ int i;
+ char *column[count+1];
+ char *utf8;
+ if (! win->clist) {
+ for (i = 0 ; i < count ; i++) {
+ column[i]=param[i].name;
+ }
+ win->clist=gtk_clist_new_with_titles(count, column);
+ gtk_clist_clear(GTK_CLIST(win->clist));
+ gtk_container_add(GTK_CONTAINER(win->scrolled_window), win->clist);
+ gtk_clist_freeze(GTK_CLIST(win->clist));
+ gtk_signal_connect(GTK_OBJECT(win->clist), "click-column", GTK_SIGNAL_FUNC(click_column), NULL);
+ gtk_signal_connect(GTK_OBJECT(win->clist), "select-row", GTK_SIGNAL_FUNC(select_row), win);
+ gtk_widget_show_all(win->window);
+ }
+ for (i = 0 ; i < count ; i++) {
+ utf8=g_locale_to_utf8(param[i].value,-1,NULL,NULL,NULL);
+ column[i]=utf8;
+ }
+ column[i]=NULL;
+ gtk_clist_append(GTK_CLIST(win->clist), column);
+ for (i = 0 ; i < count ; i++) {
+ g_free(column[i]);
+ }
+}
+
+void
+data_window_end(struct data_window *win)
+{
+ if (win && win->clist) {
+ gtk_clist_thaw(GTK_CLIST(win->clist));
+ gtk_clist_columns_autosize (GTK_CLIST(win->clist));
+ }
+}
diff --git a/data_window.h b/data_window.h
new file mode 100644
index 00000000..86a412bb
--- /dev/null
+++ b/data_window.h
@@ -0,0 +1,8 @@
+struct data_window;
+struct param_list;
+struct window;
+
+struct data_window *data_window(char *name, struct window *parent, void(*callback)(struct data_window *, char **cols));
+void data_window_add(struct data_window *win, struct param_list *param, int count);
+void data_window_begin(struct data_window *win);
+void data_window_end(struct data_window *win);
diff --git a/data_window_int.h b/data_window_int.h
new file mode 100644
index 00000000..c7922c2d
--- /dev/null
+++ b/data_window_int.h
@@ -0,0 +1,7 @@
+
+struct data_window {
+ GtkWidget *window;
+ GtkWidget *scrolled_window;
+ GtkWidget *clist;
+ void(*callback)(struct data_window *, char **cols);
+};
diff --git a/destination.c b/destination.c
new file mode 100644
index 00000000..9cced769
--- /dev/null
+++ b/destination.c
@@ -0,0 +1,622 @@
+#include <gtk/gtk.h>
+#include "coord.h"
+#include "transform.h"
+#include "block.h"
+#include "data_window.h"
+#include "country.h"
+#include "town.h"
+#include "street.h"
+#include "street_name.h"
+#include "gui/gtk/gtkeyboard.h"
+#include "cursor.h"
+#include "route.h"
+#include "statusbar.h"
+#include "unistd.h"
+#include "destination.h"
+#include "coord.h"
+#include "container.h"
+
+extern gint track_focus(gpointer data);
+
+
+
+GtkWidget *entry_country, *entry_postal, *entry_city, *entry_district;
+GtkWidget *entry_street, *entry_number;
+GtkWidget *listbox;
+int row_count=8;
+
+int selected;
+
+struct search_param {
+ struct map_data *map_data;
+ const char *country;
+ GHashTable *country_hash;
+ const char *town;
+ GHashTable *town_hash;
+ GHashTable *district_hash;
+ const char *street;
+ GHashTable *street_hash;
+ const char *number;
+ int number_low, number_high;
+ GtkWidget *clist;
+ int count;
+} search_param2;
+
+struct destination {
+ struct town *town;
+ struct street_name *street_name;
+ struct coord *c;
+};
+
+struct country_list *country_list;
+
+static void
+select_row(GtkCList *clist, int row, int column, GdkEventButton *event, struct data_window *win)
+{
+ selected=row;
+ printf("Selected %d\n", row);
+}
+
+int
+destination_set(struct container *co, enum destination_type type, char *text, struct coord *pos)
+{
+ route_set_position(co->route, cursor_pos_get(co->cursor));
+ route_set_destination(co->route, pos);
+ graphics_redraw(co);
+ if (co->statusbar && co->statusbar->statusbar_route_update)
+ co->statusbar->statusbar_route_update(co->statusbar, co->route);
+ return 0;
+}
+
+int
+get_position(struct search_param *search, struct coord *c)
+{
+ struct destination *dest;
+
+ if (selected == -1)
+ selected=0;
+ dest=gtk_clist_get_row_data (GTK_CLIST(search->clist), selected);
+
+ printf("row %d dest %p dest:0x%lx,0x%lx\n", selected, dest, dest->c->x, dest->c->y);
+ *c=*dest->c;
+ return 0;
+}
+
+void button_map(GtkWidget *widget, struct container *co)
+{
+ unsigned long scale;
+ struct coord c;
+
+ if (!get_position(&search_param2, &c)) {
+ graphics_set_view(co, &c.x, &c.y, NULL);
+ }
+}
+
+void button_destination(GtkWidget *widget, struct container *co)
+{
+ struct coord c;
+
+ if (!get_position(&search_param2, &c)) {
+ route_set_position(co->route, cursor_pos_get(co->cursor));
+ route_set_destination(co->route, &c);
+ graphics_redraw(co);
+ }
+}
+
+struct dest_town {
+ int country;
+ int assoc;
+ char *name;
+ char postal_code[16];
+ struct town town;
+};
+
+guint
+destination_town_hash(gconstpointer key)
+{
+ const struct dest_town *hash=key;
+ gconstpointer hashkey=(gconstpointer)(hash->country^hash->assoc);
+ return g_direct_hash(hashkey);
+}
+
+gboolean
+destination_town_equal(gconstpointer a, gconstpointer b)
+{
+ const struct dest_town *t_a=a;
+ const struct dest_town *t_b=b;
+ if (t_a->assoc == t_b->assoc && t_a->country == t_b->country) {
+ if (t_a->name && t_b->name && strcmp(t_a->name, t_b->name))
+ return FALSE;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+GHashTable *
+destination_town_new(void)
+{
+ return g_hash_table_new_full(destination_town_hash, destination_town_equal, NULL, g_free);
+}
+
+void
+destination_town_set(const struct dest_town *town, char **rows, int full)
+{
+ char country[32];
+ struct country *cou;
+ if ((cou=country_get_by_id(town->country))) {
+ rows[1]=cou->car;
+ } else {
+ sprintf(country,"(%d)", town->country);
+ rows[1]=country;
+ }
+ if (full) {
+ rows[4]=(char *)(town->town.postal_code2);
+ rows[5]=g_convert(town->town.name,-1,"utf-8","iso8859-1",NULL,NULL,NULL);
+ if (town->town.district[0])
+ rows[6]=g_convert(town->town.district,-1,"utf-8","iso8859-1",NULL,NULL,NULL);
+ else
+ rows[6]=NULL;
+ } else {
+ rows[4]=(char *)(town->postal_code);
+ rows[5]=g_convert(town->name,-1,"utf-8","iso8859-1",NULL,NULL,NULL);
+ }
+}
+
+void
+destination_town_show(gpointer key, gpointer value, gpointer user_data)
+{
+ struct dest_town *town=value;
+ struct search_param *search=(struct search_param *)user_data;
+ char *rows[9]={NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
+ int row;
+
+ if (search->count > 0) {
+ struct destination *dest=g_new(struct destination, 1);
+ dest->town=&town->town;
+ dest->street_name=NULL;
+ dest->c=town->town.c;
+ destination_town_set(town, rows, 0);
+ row=gtk_clist_append(GTK_CLIST(search->clist), rows);
+ printf("town row %d %p dest:0x%lx,0x%lx\n", row, dest, dest->c->x, dest->c->y);
+ gtk_clist_set_row_data(GTK_CLIST(search->clist), row, dest);
+ search->count--;
+ }
+}
+
+GHashTable *
+destination_country_new(void)
+{
+ return g_hash_table_new_full(NULL, NULL, NULL, g_free);
+}
+
+int
+destination_country_add(struct country *cou, void *data)
+{
+ struct search_param *search=data;
+ struct country *cou2;
+
+ void *first;
+ first=g_hash_table_lookup(search->country_hash, (void *)(cou->id));
+ if (! first) {
+ cou2=g_new(struct country, 1);
+ *cou2=*cou;
+ g_hash_table_insert(search->country_hash, (void *)(cou->id), cou2);
+ }
+ return 0;
+}
+
+void
+destination_country_show(gpointer key, gpointer value, gpointer user_data)
+{
+ struct country *cou=value;
+ struct search_param *search=(struct search_param *)user_data;
+ char *rows[9]={NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
+ if (search->count > 0) {
+ rows[0]=cou->name;
+ rows[1]=cou->car;
+ rows[2]=cou->iso2;
+ rows[3]=cou->iso3;
+ gtk_clist_append(GTK_CLIST(search->clist), rows);
+ search->count--;
+ }
+}
+
+int
+destination_town_add(struct town *town, void *data)
+{
+ struct search_param *search=data;
+ struct dest_town *first;
+
+ struct dest_town cmp;
+ char *zip1, *zip2;
+
+ if (town->id == 0x1d546b7e) {
+ printf("found\n");
+ }
+ cmp.country=town->country;
+ cmp.assoc=town->street_assoc;
+ cmp.name=town->name;
+ first=g_hash_table_lookup(search->town_hash, &cmp);
+ if (! first) {
+ first=g_new(struct dest_town, 1);
+ first->country=cmp.country;
+ first->assoc=cmp.assoc;
+ strcpy(first->postal_code, town->postal_code2);
+ first->name=town->name;
+ first->town=*town;
+ g_hash_table_insert(search->town_hash, first, first);
+ } else {
+ zip1=town->postal_code2;
+ zip2=first->postal_code;
+ while (*zip1 && *zip2) {
+ if (*zip1 != *zip2) {
+ while (*zip2) {
+ *zip2++='.';
+ }
+ break;
+ }
+ zip1++;
+ zip2++;
+ }
+ }
+ cmp.name=NULL;
+ cmp.assoc=town->id;
+ first=g_hash_table_lookup(search->district_hash, &cmp);
+ if (! first) {
+ first=g_new(struct dest_town, 1);
+ first->country=cmp.country;
+ first->assoc=cmp.assoc;
+ first->name=NULL;
+ first->town=*town;
+ g_hash_table_insert(search->district_hash, first, first);
+ }
+ return 0;
+}
+
+void
+destination_town_search(gpointer key, gpointer value, gpointer user_data)
+{
+ struct country *cou=value;
+ struct search_param *search=(struct search_param *)user_data;
+ town_search_by_name(search->map_data, cou->id, search->town, 1, destination_town_add, search);
+
+}
+
+GHashTable *
+destination_street_new(void)
+{
+ return g_hash_table_new_full(NULL, NULL, NULL, g_free);
+}
+
+
+int
+destination_street_add(struct street_name *name, void *data)
+{
+ struct search_param *search=data;
+ struct street_name *name2;
+
+ name2=g_new(struct street_name, 1);
+ *name2=*name;
+ g_hash_table_insert(search->street_hash, name2, name2);
+ return 0;
+}
+
+static int
+number_partial(int search, int ref, int ext)
+{
+ int max=1;
+
+ printf("number_partial(%d,%d,%d)", search, ref, ext);
+ if (ref >= 10)
+ max=10;
+ if (ref >= 100)
+ max=100;
+ if (ref >= 1000)
+ max=1000;
+ while (search < max) {
+ search*=10;
+ search+=ext;
+ }
+ printf("max=%d result=%d\n", max, search);
+ return search;
+}
+
+static int
+check_number(int low, int high, int s_low, int s_high)
+{
+ printf("check_number(%d,%d,%d,%d)\n", low, high, s_low, s_high);
+ if (low <= s_high && high >= s_low)
+ return 1;
+ if (s_low == s_high) {
+ if (low <= number_partial(s_high, high, 9) && high >= number_partial(s_low, low, 0))
+ return 1;
+ }
+ printf("return 0\n");
+ return 0;
+}
+
+void
+destination_street_show_common(gpointer key, gpointer value, gpointer user_data, int number)
+{
+ struct street_name *name=value;
+ struct search_param *search=(struct search_param *)user_data;
+ char *utf8;
+ struct dest_town cmp;
+ struct dest_town *town;
+ int row;
+ char buffer[32];
+ char *rows[9]={NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
+ struct street_name_info info;
+ struct street_name_number_info num_info;
+
+ name->tmp_len=name->aux_len;
+ name->tmp_data=name->aux_data;
+ while (street_name_get_info(&info, name) && search->count > 0) {
+ struct destination *dest;
+ cmp.country=info.country;
+ cmp.assoc=info.dist;
+ cmp.name=NULL;
+ town=g_hash_table_lookup(search->district_hash, &cmp);
+ printf("town=%p\n", town);
+ if (town) {
+ destination_town_set(town, rows, 1);
+ utf8=g_convert(name->name2,-1,"utf-8","iso8859-1",NULL,NULL,NULL);
+ rows[4]=utf8;
+ if (number) {
+ info.tmp_len=info.aux_len;
+ info.tmp_data=info.aux_data;
+ while (street_name_get_number_info(&num_info, &info) && search->count > 0) {
+ dest=g_new(struct destination, 1);
+ dest->town=&town->town;
+ dest->street_name=name;
+ dest->c=num_info.c;
+ if (check_number(num_info.first, num_info.last, search->number_low, search->number_high)) {
+ if (num_info.first == num_info.last)
+ sprintf(buffer,"%d",num_info.first);
+ else
+ sprintf(buffer,"%d-%d",num_info.first,num_info.last);
+ rows[8]=buffer;
+ printf("'%s','%s','%s','%s','%s','%s'\n", rows[0],rows[1],rows[2],rows[3],rows[4],rows[5]);
+ row=gtk_clist_append(GTK_CLIST(listbox), rows);
+ gtk_clist_set_row_data(GTK_CLIST(listbox), row, dest);
+ search->count--;
+ }
+ }
+ } else {
+ row=gtk_clist_append(GTK_CLIST(listbox), rows);
+ dest=g_new(struct destination, 1);
+ dest->town=&town->town;
+ dest->street_name=name;
+ dest->c=info.c;
+ gtk_clist_set_row_data(GTK_CLIST(listbox), row, dest);
+ search->count--;
+ }
+ g_free(utf8);
+ } else {
+ printf("Town for '%s' not found\n", name->name2);
+ }
+ }
+}
+
+void
+destination_street_show(gpointer key, gpointer value, gpointer user_data)
+{
+ destination_street_show_common(key, value, user_data, 0);
+}
+
+void
+destination_street_show_number(gpointer key, gpointer value, gpointer user_data)
+{
+ destination_street_show_common(key, value, user_data, 1);
+}
+
+void
+destination_street_search(gpointer key, gpointer value, gpointer user_data)
+{
+ const struct dest_town *town=value;
+ struct search_param *search=(struct search_param *)user_data;
+ street_name_search(search->map_data, town->country, town->assoc, search->street, 1, destination_street_add, search);
+}
+
+
+
+void changed(GtkWidget *widget, struct search_param *search)
+{
+ const char *str;
+ char *empty[9]={NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
+ char *dash;
+
+ gtk_clist_freeze(GTK_CLIST(listbox));
+ gtk_clist_clear(GTK_CLIST(listbox));
+
+ selected=-1;
+
+ search->count=row_count;
+
+ str=gtk_entry_get_text(GTK_ENTRY(widget));
+
+ if (widget == entry_country) {
+ if (search->country_hash) g_hash_table_destroy(search->country_hash);
+ search->country_hash=NULL;
+ }
+ if (widget == entry_country || widget == entry_city) {
+ if (search->town_hash) g_hash_table_destroy(search->town_hash);
+ if (search->district_hash) g_hash_table_destroy(search->district_hash);
+ search->town_hash=NULL;
+ search->district_hash=NULL;
+ }
+
+ if (widget == entry_country || widget == entry_city || widget == entry_street) {
+ if (search->street_hash) g_hash_table_destroy(search->street_hash);
+ search->street_hash=NULL;
+ }
+
+ if (widget == entry_country) {
+ search->country_hash=destination_country_new();
+ search->country=str;
+ country_search_by_name(str, 1, destination_country_add, search);
+ country_search_by_car(str, 1, destination_country_add, search);
+ country_search_by_iso2(str, 1, destination_country_add, search);
+ country_search_by_iso3(str, 1, destination_country_add, search);
+ g_hash_table_foreach(search->country_hash, destination_country_show, search);
+ }
+ if (widget == entry_city) {
+ printf("Ort: '%s'\n", str);
+ if (strlen(str) > 1) {
+ search->town=str;
+ search->town_hash=destination_town_new();
+ search->district_hash=destination_town_new();
+ g_hash_table_foreach(search->country_hash, destination_town_search, search);
+ g_hash_table_foreach(search->town_hash, destination_town_show, search);
+ }
+ }
+ if (widget == entry_street) {
+ printf("Street: '%s'\n", str);
+ search->street=str;
+ search->street_hash=destination_street_new();
+ g_hash_table_foreach(search->town_hash, destination_street_search, search);
+ g_hash_table_foreach(search->street_hash, destination_street_show, search);
+ }
+ if (widget == entry_number) {
+ char buffer[strlen(str)+1];
+ strcpy(buffer, str);
+ search->number=str;
+ dash=index(buffer,'-');
+ if (dash) {
+ *dash++=0;
+ search->number_low=atoi(buffer);
+ if (strlen(str))
+ search->number_high=atoi(dash);
+ else
+ search->number_high=10000;
+ } else {
+ if (!strlen(str)) {
+ search->number_low=0;
+ search->number_high=10000;
+ } else {
+ search->number_low=atoi(str);
+ search->number_high=atoi(str);
+ }
+ }
+ g_hash_table_foreach(search->street_hash, destination_street_show_number, search);
+ }
+ while (search->count-- > 0) {
+ gtk_clist_append(GTK_CLIST(listbox), empty);
+ }
+ gtk_clist_columns_autosize (GTK_CLIST(listbox));
+ gtk_clist_thaw(GTK_CLIST(listbox));
+}
+
+int destination_address(struct container *co)
+{
+ GtkWidget *window2, *keyboard, *vbox, *table;
+ GtkWidget *label_country;
+ GtkWidget *label_postal, *label_city, *label_district;
+ GtkWidget *label_street, *label_number;
+ GtkWidget *hseparator1,*hseparator2;
+ GtkWidget *button1,*button2;
+ init_keyboard_stuff((char *) NULL);
+ int handlerid;
+ int i;
+ gchar *text[9]={NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
+ struct search_param *search=&search_param2;
+
+#if 0
+ if (co->cursor) {
+ struct coord *c;
+ struct route_info *rt;
+ struct street_str *st;
+ struct block_info *blk;
+ struct street_name name;
+ struct town town;
+
+ c=cursor_pos_get(co->cursor);
+ rt=route_find_nearest_street(co->map_data, c);
+ st=route_info_get_street(rt);
+ blk=route_info_get_block(rt);
+ printf("segid 0x%lx nameid 0x%lx\n", st->segid, st->nameid);
+ street_name_get_by_id(&name, blk->mdata, st->nameid);
+ printf("'%s' '%s' %d\n", name.name1, name.name2, name.segment_count);
+ for (i = 0 ; i < name.segment_count ; i++) {
+ if (name.segments[i].segid == st->segid) {
+ printf("found: 0x%x, 0x%x\n", name.segments[i].country, name.segments[i].segid);
+ town_get_by_id(&town, co->map_data, name.segments[i].country, name.townassoc);
+ printf("%s/%s\n", town.name, town.district);
+ }
+ }
+ }
+#endif
+
+ window2 = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ keyboard = build_keyboard(NULL, "/usr/local/share/gtkeyboard/DE.key");
+ vbox = gtk_vbox_new(FALSE, 0);
+ table = gtk_table_new(3, 8, FALSE);
+
+ entry_country = gtk_entry_new();
+ label_country = gtk_label_new("Land");
+ entry_postal = gtk_entry_new();
+ label_postal = gtk_label_new("PLZ");
+ entry_city = gtk_entry_new();
+ label_city = gtk_label_new("Ort");
+ entry_district = gtk_entry_new();
+ label_district = gtk_label_new("Ortsteil/Gemeinde");
+ hseparator1 = gtk_vseparator_new();
+ entry_street = gtk_entry_new();
+ label_street = gtk_label_new("Strasse");
+ entry_number = gtk_entry_new();
+ label_number = gtk_label_new("Nummer");
+ listbox = gtk_clist_new(9);
+ for (i=0 ; i < row_count ; i++) {
+ gtk_clist_append(GTK_CLIST(listbox), text);
+ }
+ gtk_clist_thaw(GTK_CLIST(listbox));
+ gtk_clist_columns_autosize (GTK_CLIST(listbox));
+
+ hseparator2 = gtk_vseparator_new();
+ button1 = gtk_button_new_with_label("Karte");
+ button2 = gtk_button_new_with_label("Ziel");
+
+ gtk_table_attach(GTK_TABLE(table), label_country, 0, 1, 0, 1, 0, GTK_FILL|GTK_EXPAND, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), label_postal, 1, 2, 0, 1, 0, GTK_FILL|GTK_EXPAND, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), label_city, 2, 3, 0, 1, 0, GTK_FILL|GTK_EXPAND, 0, 0);
+
+ gtk_table_attach(GTK_TABLE(table), entry_country, 0, 1, 1, 2, 0, GTK_FILL|GTK_EXPAND, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), entry_postal, 1, 2, 1, 2, 0, GTK_FILL|GTK_EXPAND, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), entry_city, 2, 3, 1, 2, 0, GTK_FILL|GTK_EXPAND, 0, 0);
+
+ gtk_table_attach(GTK_TABLE(table), label_district, 0, 1, 2, 3, 0, GTK_FILL|GTK_EXPAND, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), label_street, 1, 2, 2, 3, 0, GTK_FILL|GTK_EXPAND, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), label_number, 2, 3, 2, 3, 0, GTK_FILL|GTK_EXPAND, 0, 0);
+
+ gtk_table_attach(GTK_TABLE(table), entry_district, 0, 1, 3, 4, 0, GTK_FILL|GTK_EXPAND, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), entry_street, 1, 2, 3, 4, 0, GTK_FILL|GTK_EXPAND, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), entry_number, 2, 3, 3, 4, 0, GTK_FILL|GTK_EXPAND, 0, 0);
+
+ gtk_table_attach(GTK_TABLE(table), listbox, 0, 3, 4, 5, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0);
+
+ gtk_table_attach(GTK_TABLE(table), button1, 0, 1, 5, 6, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), button2, 2, 3, 5, 6, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0);
+
+ search->map_data=co->map_data;
+ search->clist=listbox;
+ gtk_signal_connect(GTK_OBJECT(entry_country), "changed", GTK_SIGNAL_FUNC(changed), search);
+ gtk_signal_connect(GTK_OBJECT(entry_postal), "changed", GTK_SIGNAL_FUNC(changed), search);
+ gtk_signal_connect(GTK_OBJECT(entry_city), "changed", GTK_SIGNAL_FUNC(changed), search);
+ gtk_signal_connect(GTK_OBJECT(entry_district), "changed", GTK_SIGNAL_FUNC(changed), search);
+ gtk_signal_connect(GTK_OBJECT(entry_street), "changed", GTK_SIGNAL_FUNC(changed), search);
+ gtk_signal_connect(GTK_OBJECT(entry_number), "changed", GTK_SIGNAL_FUNC(changed), search);
+ gtk_signal_connect(GTK_OBJECT(button1), "clicked", GTK_SIGNAL_FUNC(button_map), co);
+ gtk_signal_connect(GTK_OBJECT(button2), "clicked", GTK_SIGNAL_FUNC(button_destination), co);
+ gtk_widget_grab_focus(entry_city);
+
+ gtk_container_add(GTK_CONTAINER(vbox), table);
+ gtk_container_add(GTK_CONTAINER(vbox), keyboard);
+ gtk_container_add(GTK_CONTAINER(window2), vbox);
+ handlerid = gtk_timeout_add(256, (GtkFunction) track_focus, NULL);
+
+ gtk_signal_connect(GTK_OBJECT(listbox), "select-row", GTK_SIGNAL_FUNC(select_row), NULL);
+
+ gtk_widget_show_all(window2);
+
+ return 0;
+}
diff --git a/destination.h b/destination.h
new file mode 100644
index 00000000..68530f8f
--- /dev/null
+++ b/destination.h
@@ -0,0 +1,11 @@
+enum destination_type {
+ destination_type_town=4,
+ destination_type_poly=6,
+ destination_type_street=8,
+ destination_type_house=12,
+ destination_type_map_point=16,
+ destination_type_bookmark=128,
+};
+
+int destination_address(struct container *co);
+int destination_set(struct container *co, enum destination_type type, char *text, struct coord *c);
diff --git a/display.c b/display.c
new file mode 100644
index 00000000..ca1874ae
--- /dev/null
+++ b/display.c
@@ -0,0 +1,266 @@
+#include <malloc.h>
+#include <math.h>
+#include "display.h"
+#include "graphics.h"
+
+struct graphics_image *icons;
+
+struct graphics_image *
+get_icon(struct graphics *gr, char *name)
+{
+ struct graphics_image *curr=icons;
+ while (curr) {
+ if (! strcmp(curr->name, name) && curr->gr == gr)
+ return curr;
+ curr=curr->next;
+ }
+ curr=gr->image_new(gr, name);
+ curr->next=icons;
+ icons=curr;
+ return curr;
+}
+
+static int
+within_dist_point(struct point *p0, struct point *p1, int dist)
+{
+ if ((p0->x-p1->x)*(p0->x-p1->x) + (p0->y-p1->y)*(p0->y-p1->y) <= dist*dist) {
+ return 1;
+ }
+ return 0;
+}
+
+static int
+within_dist_line(struct point *p, struct point *line_p0, struct point *line_p1, int dist)
+{
+ int vx,vy,wx,wy;
+ int c1,c2;
+ struct point line_p;
+
+ vx=line_p1->x-line_p0->x;
+ vy=line_p1->y-line_p0->y;
+ wx=p->x-line_p0->x;
+ wy=p->y-line_p0->y;
+
+ c1=vx*wx+vy*wy;
+ if ( c1 <= 0 )
+ return within_dist_point(p, line_p0, dist);
+ c2=vx*vx+vy*vy;
+ if ( c2 <= c1 )
+ return within_dist_point(p, line_p1, dist);
+
+ line_p.x=line_p0->x+vx*c1/c2;
+ line_p.y=line_p0->y+vy*c1/c2;
+ return within_dist_point(p, &line_p, dist);
+}
+
+static int
+within_polygon(struct point *p, struct point *poly_pnt, int count)
+{
+ int i, j, c = 0;
+ for (i = 0, j = count-1; i < count; j = i++) {
+ if ((((poly_pnt[i].y <= p->y) && ( p->y < poly_pnt[j].y )) ||
+ ((poly_pnt[j].y <= p->y) && ( p->y < poly_pnt[i].y))) &&
+ (poly_pnt->x < (poly_pnt[j].x - poly_pnt[i].x) * (p->y - poly_pnt[i].y) / (poly_pnt[j].y - poly_pnt[i].y) + poly_pnt[i].x)) {
+ c = !c;
+ }
+ }
+ return c;
+}
+
+static int
+within_dist_lines(struct point *p, struct point *line_pnt, int count, int dist)
+{
+ int i;
+ for (i = 0 ; i < count-1 ; i++) {
+ if (within_dist_line(p,line_pnt+i,line_pnt+i+1,dist)) {
+ return 1;
+ }
+ }
+ return 0;
+}
+
+void
+display_free(struct display_list **list, int count)
+{
+ struct display_list *curr,*next;
+ while (count--) {
+ curr=*list;
+ while (curr) {
+ next=curr->next;
+ g_free(curr);
+ curr=next;
+ }
+ *list++=NULL;
+ }
+}
+
+void *
+display_add(struct display_list **head, int type, int attr, char *label, int count, struct point *p, void (*info)(struct display_list *list, struct popup_item **item),void *data, int data_size)
+{
+ struct display_list *new;
+ int label_len=0;
+
+ if (! data)
+ data_size=0;
+
+ if (label)
+ label_len=strlen(label)+1;
+ new=g_malloc(sizeof(*new)+count*sizeof(*p)+label_len+data_size);
+ new->type=type;
+ new->attr=attr;
+ new->info=info;
+ if (label) {
+ new->label=(char *)new+sizeof(*new)+count*sizeof(*p);
+ strcpy(new->label, label);
+ } else
+ new->label=NULL;
+ new->count=count;
+ memcpy(new->p, p, count*sizeof(*p));
+ if (data_size) {
+ new->data=(char *)new+sizeof(*new)+count*sizeof(*p)+label_len;
+ memcpy(new->data, data, data_size);
+ } else
+ new->data=NULL;
+ new->next=*head;
+ *head=new;
+ return new->data;
+}
+
+void
+display_draw(struct display_list *list, struct graphics *gr, struct graphics_gc *gc_fill, struct graphics_gc *gc_line)
+{
+ struct graphics_image *icon;
+ int r=3;
+ struct point p;
+ while (list) {
+ switch (list->type) {
+ case 0:
+ gr->draw_polygon(gr, gc_fill, list->p, list->count);
+ if (gc_line)
+ gr->draw_lines(gr, gc_line, list->p, list->count);
+ break;
+ case 1:
+ case 2:
+ gr->draw_lines(gr, gc_fill, list->p, list->count);
+ break;
+ case 3:
+ case 4:
+ gr->draw_circle(gr, gc_fill, list->p, r);
+ break;
+ case 5:
+ icon=get_icon(gr, list->label);
+ if (icon) {
+ p.x=list->p[0].x - icon->width/2;
+ p.y=list->p[0].y - icon->height/2;
+ gr->draw_image(gr, gc_fill, &p, icon);
+ }
+ else
+ printf("invalid icon '%s'\n", list->label);
+ break;
+ }
+ list=list->next;
+ }
+}
+
+void
+display_find(struct point *p, struct display_list **in, int in_count, int maxdist, struct display_list **out, int out_count)
+{
+ int i=0;
+ struct display_list *curr;
+
+ while (in_count--) {
+ curr=*in++;
+ while (curr) {
+ switch (curr->type) {
+ case 0:
+ if (within_polygon(p, curr->p, curr->count) ||
+ within_dist_lines(p, curr->p, curr->count, maxdist))
+ {
+ if (i < out_count)
+ out[i++]=curr;
+ }
+ break;
+ case 1:
+ case 2:
+ if (within_dist_lines(p, curr->p, curr->count, maxdist))
+ {
+ if (i < out_count)
+ out[i++]=curr;
+ }
+ break;
+ case 3:
+ case 4:
+ case 5:
+ if (within_dist_point(p, curr->p, 8))
+ {
+ if (i < out_count)
+ out[i++]=curr;
+ }
+ break;
+ }
+ curr=curr->next;
+ }
+ }
+ if (i < out_count)
+ out[i]=NULL;
+}
+
+
+static void
+label_line(struct graphics *gr, struct graphics_gc *fg, struct graphics_gc *bg, struct graphics_font *font, struct point *p, int count, char *label)
+{
+ int i,x,y,tl;
+ double dx,dy,l;
+ struct point p_t;
+
+ tl=strlen(label)*400;
+ for (i = 0 ; i < count-1 ; i++) {
+ dx=p[i+1].x-p[i].x;
+ dx*=100;
+ dy=p[i+1].y-p[i].y;
+ dy*=100;
+ l=(int)sqrt((float)(dx*dx+dy*dy));
+ if (l > tl) {
+ x=p[i].x;
+ y=p[i].y;
+ if (dx < 0) {
+ dx=-dx;
+ dy=-dy;
+ x=p[i+1].x;
+ y=p[i+1].y;
+ }
+ x+=(l-tl)*dx/l/200;
+ y+=(l-tl)*dy/l/200;
+ x-=dy*45/l/10;
+ y+=dx*45/l/10;
+ p_t.x=x;
+ p_t.y=y;
+#if 0
+ printf("display_text: '%s', %d, %d, %d, %d %d\n", label, x, y, dx*0x10000/l, dy*0x10000/l, l);
+#endif
+ gr->draw_text(gr, fg, bg, font, label, &p_t, dx*0x10000/l, dy*0x10000/l);
+ }
+ }
+}
+
+void
+display_labels(struct display_list *list, struct graphics *gr, struct graphics_gc *fg, struct graphics_gc *bg, struct graphics_font *font)
+{
+ struct point p;
+ while (list) {
+ if (list->label) {
+ switch (list->type) {
+ case 1:
+ case 2:
+ label_line(gr, fg, bg, font, list->p, list->count, list->label);
+ break;
+ case 3:
+ p.x=list->p[0].x+3;
+ p.y=list->p[0].y+10;
+ gr->draw_text(gr, fg, bg, font, list->label, &p, 0x10000, 0);
+ break;
+ }
+ }
+ list=list->next;
+ }
+}
diff --git a/display.h b/display.h
new file mode 100644
index 00000000..952381f2
--- /dev/null
+++ b/display.h
@@ -0,0 +1,24 @@
+#include "point.h"
+
+struct popup_item;
+struct graphics;
+struct graphics_gc;
+struct graphics_font;
+
+struct display_list {
+ struct display_list *next;
+ void *data;
+ int type;
+ int attr;
+ char *label;
+ int count;
+ void (*info)(struct display_list *list, struct popup_item **popup);
+ struct point p[0];
+};
+void *display_add(struct display_list **head, int type, int attr, char *label, int count, struct point *p, void (*info)(struct display_list *list, struct popup_item **popup), void *data, int data_size);
+
+void display_free(struct display_list **list, int count);
+
+void display_draw(struct display_list *list, struct graphics *gr, struct graphics_gc *gc_fill, struct graphics_gc *gc_line);
+void display_find(struct point *pnt, struct display_list **in, int in_count, int maxdist, struct display_list **out, int out_count);
+void display_labels(struct display_list *list, struct graphics *gr, struct graphics_gc *fg, struct graphics_gc *bg, struct graphics_font *font);
diff --git a/draw_info.h b/draw_info.h
new file mode 100644
index 00000000..6acee92c
--- /dev/null
+++ b/draw_info.h
@@ -0,0 +1,5 @@
+struct draw_info {
+ struct container *co;
+ int display;
+ int limit;
+};
diff --git a/file.c b/file.c
new file mode 100644
index 00000000..2389d8a7
--- /dev/null
+++ b/file.c
@@ -0,0 +1,124 @@
+#include <unistd.h>
+#include <string.h>
+#include <fcntl.h>
+#include <malloc.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include <dirent.h>
+#include <stdio.h>
+#include <glib.h>
+#include "file.h"
+
+struct file *
+file_create(char *name)
+{
+ int fd;
+ struct stat stat;
+ struct file *file=malloc(sizeof(*file)+strlen(name)+1);
+
+ if (! file)
+ return file;
+ fd=open(name, O_RDONLY);
+ if (fd < 0) {
+ free(file);
+ return NULL;
+ }
+ fstat(fd, &stat);
+ file->size=stat.st_size;
+ file->name=(char *)file+sizeof(*file);
+ strcpy(file->name, name);
+ file->begin=mmap(NULL, file->size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
+ g_assert(file->begin != NULL);
+ if (file->begin == (void *)0xffffffff) {
+ perror("mmap");
+ }
+ g_assert(file->begin != (void *)0xffffffff);
+ file->end=file->begin+file->size;
+ file->private=NULL;
+ close(fd);
+
+ g_assert(file != NULL);
+ return file;
+}
+
+void
+file_set_readonly(struct file *file)
+{
+ mprotect(file->begin, file->end-file->begin, PROT_READ);
+}
+
+void *
+file_opendir(char *dir)
+{
+ return opendir(dir);
+}
+
+char *
+file_readdir(void *hnd)
+{
+ struct dirent *ent;
+
+ ent=readdir(hnd);
+ if (! ent)
+ return NULL;
+ return ent->d_name;
+}
+
+void
+file_closedir(void *hnd)
+{
+ closedir(hnd);
+}
+
+struct file *
+file_create_caseinsensitive(char *name)
+{
+ char dirname[strlen(name)+1];
+ char *filename;
+ char *p;
+ void *d;
+ struct file *ret;
+
+ ret=file_create(name);
+ if (ret)
+ return ret;
+
+ strcpy(dirname, name);
+ p=dirname+strlen(name);
+ while (p > dirname) {
+ if (*p == '/')
+ break;
+ p--;
+ }
+ *p=0;
+ d=file_opendir(dirname);
+ if (d) {
+ *p++='/';
+ while ((filename=file_readdir(d))) {
+ if (!strcasecmp(filename, p)) {
+ strcpy(p, filename);
+ ret=file_create(dirname);
+ if (ret)
+ break;
+ }
+ }
+ file_closedir(d);
+ }
+ return ret;
+}
+
+void
+file_destroy(struct file *f)
+{
+ munmap(f->begin, f->size);
+ free(f);
+}
+
+int
+file_get_param(struct file *file, struct param_list *param, int count)
+{
+ int i=count;
+ param_add_string("Filename", file->name, &param, &count);
+ param_add_hex("Size", file->size, &param, &count);
+ return i-count;
+}
diff --git a/file.h b/file.h
new file mode 100644
index 00000000..4dedb894
--- /dev/null
+++ b/file.h
@@ -0,0 +1,18 @@
+#include "param.h"
+
+struct file {
+ unsigned char *begin;
+ unsigned char *end;
+ unsigned long size;
+ char *name;
+ void *private;
+};
+
+struct file *file_create(char *name);
+void file_set_readonly(struct file *file);
+struct file *file_create_caseinsensitive(char *name);
+int file_get_param(struct file *file, struct param_list *param, int count);
+void file_destroy(struct file *f);
+void *file_opendir(char *dir);
+char *file_readdir(void *hnd);
+void file_closedir(void *hnd);
diff --git a/get_map b/get_map
new file mode 100755
index 00000000..20de37d3
--- /dev/null
+++ b/get_map
@@ -0,0 +1,5 @@
+#! /bin/bash
+echo "/* XPM */" >map.xpm
+req="<MapRequest reqVer='100' format='jpeg' visibleRoutes='111111111' colorDepth='4'><Rect l='0' t='0' r='$1' b='$2'></Rect><Rect l='$3' t='$4' r='$5' b='$6'></Rect></MapRequest>"
+perl -e 'print (pack("a20",length($ARGV[0]))) ; print $ARGV[0]' "$req" | netcat localhost 10371 | dd bs=20 skip=1 2>/dev/null | tail +2 >>map.xpm
+
diff --git a/gps_emu b/gps_emu
new file mode 100755
index 00000000..f2eef3e5
--- /dev/null
+++ b/gps_emu
@@ -0,0 +1,19 @@
+#! /bin/bash
+function send_data
+{
+ trap send_data SIGPIPE
+ while read line
+ do
+ case $line in
+ \$GPVTG*)
+ echo "$line"
+ sleep 1
+ ;;
+ *)
+ echo "$line"
+ ;;
+ esac
+ done <track/all.txt >/tmp/gpsdata
+}
+
+send_data
diff --git a/gps_emu2 b/gps_emu2
new file mode 100755
index 00000000..8f5d9a61
--- /dev/null
+++ b/gps_emu2
@@ -0,0 +1,40 @@
+#! /usr/bin/perl
+
+open(FILE,"<$ARGV[0]");
+read(FILE,$header,64);
+
+($magic,$version)=unpack("a8l",$header);
+
+#print "magic=$magic version=$version\n";
+
+select STDOUT; $| = 1;
+
+while (read(FILE,$record,64))
+{
+ ($flags,$status,$mode,$hdop,$vdop,$pdop,$sats,$timestampl,$timestamph,$latitude,$longitude,$altitude,$speed,$direction)=unpack("SCCCCCCLLddddd",$record);
+
+
+ if ($mode == 3) {
+ ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime($timestampl);
+ $datestring=sprintf("%02d.%02d.%d %02d:%02d:%02d",$mday,$mon+1,$year+1900,$hour,$min,$sec);
+ $long_dir="E";
+ $lat_dir="N";
+ if ($longitude < 0) {
+ $long_dir="W";
+ $logitude=-$longitude;
+ }
+ if ($latitude < 0) {
+ $lat_dir="S";
+ $latitude=-$latitude;
+ }
+ $long_deg=int($longitude);
+ $lat_deg=int($latitude);
+ $long_gps=$long_deg*100+($longitude-$long_deg)*60;
+ $lat_gps=$lat_deg*100+($latitude-$lat_deg)*60;
+ $lastpos="$lat_gps $lat_dir $long_gps $long_dir";
+ printf("\$GPGGA,%02d%02d%02d,%s,%s,%s,%s,1,%d,%s,%s,M,,,,0000*0C\n",$hour,$min,$sec,$lat_gps,$lat_dir,$long_gps,$long_dir,$sats,$hdop,$altitude);
+ printf("\$GPVTG,%s,T,,M,,N,%s,K,*6A\n",$direction,$speed*1.852);
+ printf(STDERR "\$GPGGA,%02d%02d%02d,%s,%s,%s,%s,1,%d,%s,%s,M,,,,0000*0C\n",$hour,$min,$sec,$lat_gps,$lat_dir,$long_gps,$long_dir,$sats,$hdop,$altitude);
+ sleep(1);
+ }
+}
diff --git a/gps_emu3 b/gps_emu3
new file mode 100755
index 00000000..5c0ecf25
--- /dev/null
+++ b/gps_emu3
@@ -0,0 +1,12 @@
+#! /bin/bash
+while read line
+do
+ if [ -n "$line" ]
+ then
+ echo $line
+ fi
+ if [ "${line#\$GPVTG}" != "$line" ]
+ then
+ sleep 1
+ fi
+done <$1
diff --git a/graphics.c b/graphics.c
new file mode 100644
index 00000000..8787e05e
--- /dev/null
+++ b/graphics.c
@@ -0,0 +1,401 @@
+#include <glib.h>
+#include "string.h"
+#include "draw_info.h"
+#include "graphics.h"
+#include "map_data.h"
+#include "coord.h"
+#include "param.h" /* FIXME */
+#include "block.h" /* FIXME */
+#include "poly.h"
+#include "town.h"
+#include "street.h"
+#include "transform.h"
+#include "container.h"
+
+
+#define GC_BACKGROUND 0
+#define GC_WOOD 1
+#define GC_TOWN_FILL 2
+#define GC_TOWN_LINE 3
+#define GC_WATER_FILL 4
+#define GC_WATER_LINE 5
+#define GC_RAIL 6
+#define GC_TEXT_FG 7
+#define GC_TEXT_BG 8
+#define GC_BLACK 9
+#define GC_STREET_SMALL 10
+#define GC_STREET_SMALL_B 11
+#define GC_PARK 12
+#define GC_BUILDING 13
+#define GC_BUILDING_2 14
+#define GC_STREET_MID 15
+#define GC_STREET_MID_B 16
+#define GC_STREET_BIG 17
+#define GC_STREET_BIG_B 18
+#define GC_STREET_BIG2 19
+#define GC_STREET_BIG2_B 20
+#define GC_STREET_BIG2_L 21
+#define GC_STREET_NO_PASS 22
+#define GC_STREET_ROUTE 23
+#define GC_LAST 24
+
+
+int color[][3]={
+ {0xffff, 0xefef, 0xb7b7},
+ {0x8e8e, 0xc7c7, 0x8d8d},
+ {0xffff, 0xc8c8, 0x9595},
+ {0xebeb, 0xb4b4, 0x8181},
+ {0x8282, 0xc8c8, 0xeaea},
+ {0x5050, 0x9696, 0xb8b8},
+ {0x8080, 0x8080, 0x8080},
+ {0x0, 0x0, 0x0},
+ {0xffff, 0xffff, 0xffff},
+ {0x0, 0x0, 0x0},
+ {0xffff, 0xffff, 0xffff},
+ {0xe0e0, 0xe0e0, 0xe0e0},
+ {0x7c7c, 0xc3c3, 0x3434},
+ {0xe6e6, 0xe6e6, 0xe6e6},
+ {0xffff, 0x6666, 0x6666},
+ {0xffff, 0xffff, 0x0a0a},
+ {0xe0e0, 0xe0e0, 0xe0e0},
+ {0xffff, 0x0000, 0x0000},
+ {0x0000, 0x0000, 0x0000},
+ {0xffff, 0xffff, 0x0a0a},
+ {0xffff, 0x0000, 0x0000},
+ {0xffff, 0x0000, 0x0000},
+ {0xe0e0, 0xe0e0, 0xffff},
+ {0x0000, 0x0000, 0xa0a0},
+};
+
+void
+container_init_gra(struct container *co)
+{
+ struct graphics *gra=co->gra;
+ int i;
+
+ gra->font=g_new0(struct graphics_font *,3);
+ gra->font[0]=gra->font_new(gra,140);
+ gra->font[1]=gra->font_new(gra,200);
+ gra->font[2]=gra->font_new(gra,300);
+ gra->gc=g_new0(struct graphics_gc *, GC_LAST);
+ for (i = 0 ; i < GC_LAST ; i++) {
+ gra->gc[i]=gra->gc_new(gra);
+ gra->gc_set_background(gra->gc[i], color[0][0], color[0][1], color[0][2]);
+ gra->gc_set_foreground(gra->gc[i], color[i][0], color[i][1], color[i][2]);
+ }
+ gra->gc_set_background(gra->gc[GC_TEXT_BG], color[7][0], color[7][1], color[7][2]);
+}
+
+void
+graphics_get_view(struct container *co, long *x, long *y, unsigned long *scale)
+{
+ struct transformation *t=co->trans;
+ if (x) *x=t->center.x;
+ if (y) *y=t->center.y;
+ if (scale) *scale=t->scale;
+}
+
+void
+graphics_set_view(struct container *co, long *x, long *y, unsigned long *scale)
+{
+ struct transformation *t=co->trans;
+ if (x) t->center.x=*x;
+ if (y) t->center.y=*y;
+ if (scale) t->scale=*scale;
+ graphics_redraw(co);
+}
+
+void
+graphics_draw(struct map_data *mdata, int file, struct container *co, int display, int limit, int limit2,
+ void(*func)(struct block_info *, unsigned char *, unsigned char *, void *))
+{
+ struct draw_info info;
+ info.co=co;
+ info.display=display;
+ info.limit=limit;
+ map_data_foreach(mdata, file, co->trans, limit2, func, &info);
+}
+
+void
+graphics_redraw(struct container *co)
+{
+ int scale=transform_get_scale(co->trans);
+ int i,slimit=255,tlimit=255,plimit=255;
+ int bw[4],w[4],t[4];
+ struct display_list **disp=co->disp;
+ struct graphics *gra=co->gra;
+
+#if 0
+ printf("scale=%d center=0x%lx,0x%lx mercator scale=%f\n", scale, co->trans->center.x, co->trans->center.y, transform_scale(co->trans->center.y));
+#endif
+
+ display_free(co->disp, display_end);
+
+ transform_setup_source_rect(co->trans);
+
+ gra->draw_mode(gra, draw_mode_begin);
+ for (i = 0 ; i < data_window_type_end; i++) {
+ data_window_begin(co->data_window[i]);
+ }
+ gra->gc_set_linewidth(gra->gc[GC_RAIL], 3);
+
+ bw[0]=0;
+ bw[1]=0;
+ bw[2]=0;
+ bw[3]=0;
+ w[0]=1;
+ w[1]=1;
+ w[2]=1;
+ w[3]=1;
+ t[0]=0xf;
+ t[1]=0xf;
+ t[2]=0xf;
+ t[3]=0xf;
+ if (scale < 2) {
+ tlimit=0xff;
+ slimit=0xff;
+ bw[0]=17;
+ w[0]=15;
+ bw[1]=19;
+ w[1]=17;
+ bw[2]=19;
+ w[2]=17;
+ bw[3]=21;
+ w[3]=17;
+ } else if (scale < 4) {
+ tlimit=0xff;
+ slimit=0xff;
+ bw[0]=11;
+ w[0]=9;
+ bw[1]=13;
+ w[1]=11;
+ bw[2]=13;
+ w[2]=11;
+ bw[3]=15;
+ w[3]=11;
+ } else if (scale < 8) {
+ tlimit=0xff;
+ slimit=0xff;
+ bw[0]=5;
+ w[0]=3;
+ bw[1]=11;
+ w[1]=9;
+ bw[2]=11;
+ w[2]=9;
+ bw[3]=13;
+ w[3]=9;
+ t[0]=0xa;
+ t[1]=0xf;
+ } else if (scale < 16) {
+ tlimit=0xff;
+ slimit=0xff;
+ bw[1]=9;
+ w[1]=7;
+ bw[2]=9;
+ w[2]=7;
+ bw[3]=11;
+ w[3]=7;
+ t[0]=0x9;
+ t[1]=0xe;
+ } else if (scale < 32) {
+ tlimit=0xff;
+ slimit=0xff;
+ bw[1]=5;
+ w[1]=3;
+ bw[2]=5;
+ w[2]=3;
+ bw[3]=5;
+ w[3]=3;
+ t[0]=0x8;
+ t[1]=0xb;
+ } else if (scale < 64) {
+ tlimit=0xf;
+ slimit=0x6;
+ bw[1]=5;
+ w[1]=3;
+ bw[2]=5;
+ w[2]=3;
+ bw[3]=5;
+ w[3]=3;
+ t[0]=0x8;
+ t[1]=0xa;
+ } else if (scale < 128) {
+ tlimit=0xc;
+ slimit=0x6;
+ plimit=0x1e;
+ w[1]=3;
+ w[2]=3;
+ bw[3]=5;
+ w[3]=3;
+ t[0]=0x7;
+ t[1]=0xa;
+ } else if (scale < 256) {
+ tlimit=0xb;
+ slimit=0x5;
+ plimit=0x1a;
+ w[2]=3;
+ bw[3]=5;
+ w[3]=3;
+ t[0]=0x7;
+ t[1]=0x8;
+ } else if (scale < 512) {
+ tlimit=0x9;
+ slimit=0x5;
+ plimit=0x14;
+ w[1]=0;
+ w[2]=1;
+ bw[3]=3;
+ w[3]=1;
+ t[0]=0x4;
+ t[1]=0x7;
+ } else if (scale < 1024) {
+ tlimit=0x8;
+ slimit=0x4;
+ slimit=0x4;
+ plimit=0x11;
+ w[1]=0;
+ w[2]=1;
+ bw[3]=3;
+ w[3]=1;
+ t[0]=0x3;
+ t[1]=0x5;
+ } else if (scale < 2048) {
+ tlimit=0x5;
+ slimit=0x3;
+ plimit=0x10;
+ bw[3]=3;
+ w[3]=1;
+ t[0]=0x2;
+ t[1]=0x4;
+ } else if (scale < 4096) {
+ bw[3]=3;
+ w[3]=1;
+ tlimit=0x4;
+ slimit=0x2;
+ plimit=0xf;
+ t[0]=0x2;
+ t[1]=0x3;
+ } else if (scale < 8192) {
+ bw[3]=3;
+ w[3]=1;
+ tlimit=0x3;
+ slimit=0x2;
+ plimit=0xf;
+ t[0]=0x1;
+ t[1]=0x2;
+ } else {
+ bw[3]=3;
+ w[3]=1;
+ tlimit=0x2;
+ slimit=0x2;
+ plimit=0xf;
+ t[0]=0x1;
+ t[1]=0x4;
+ }
+ gra->gc_set_linewidth(gra->gc[GC_STREET_SMALL], w[0]);
+ gra->gc_set_linewidth(gra->gc[GC_STREET_NO_PASS], w[0]);
+ gra->gc_set_linewidth(gra->gc[GC_STREET_SMALL_B], bw[0]);
+ gra->gc_set_linewidth(gra->gc[GC_STREET_MID], w[1]);
+ gra->gc_set_linewidth(gra->gc[GC_STREET_MID_B], bw[1]);
+ gra->gc_set_linewidth(gra->gc[GC_STREET_BIG], w[2]);
+ gra->gc_set_linewidth(gra->gc[GC_STREET_BIG_B], bw[2]);
+ gra->gc_set_linewidth(gra->gc[GC_STREET_BIG2], w[3]);
+ gra->gc_set_linewidth(gra->gc[GC_STREET_BIG2_B], bw[3]);
+ gra->gc_set_linewidth(gra->gc[GC_STREET_ROUTE], w[3]+7+w[3]/2);
+
+ profile_timer(NULL);
+ graphics_draw(co->map_data, file_border_ply, co, display_rail, plimit, 48, poly_draw_block);
+ graphics_draw(co->map_data, file_woodland_ply, co, display_wood, plimit, 48, poly_draw_block);
+ graphics_draw(co->map_data, file_other_ply, co, display_other, plimit, 48, poly_draw_block);
+ graphics_draw(co->map_data, file_town_twn, co, display_town, tlimit, 48, town_draw_block);
+ graphics_draw(co->map_data, file_water_ply, co, display_water, plimit, 48, poly_draw_block);
+ graphics_draw(co->map_data, file_sea_ply, co, display_sea, plimit, 48, poly_draw_block);
+ /* todo height, tunnel, bridge, street_bti ??? */
+#if 0
+ graphics_draw(co->map_data, file_height_ply, co, display_other1, plimit, 48, poly_draw_block);
+#endif
+ if (scale < 256) {
+ graphics_draw(co->map_data, file_rail_ply, co, display_rail, plimit, 48, poly_draw_block);
+ }
+ profile_timer("map_draw");
+ plugin_call_draw(co);
+ profile_timer("plugin");
+#if 0
+ draw_poly(map, &co->d_tunnel_ply, "Tunnel", 0, 11, plimit);
+#endif
+ graphics_draw(co->map_data, file_street_str, co, display_street, slimit, 7, street_draw_block);
+
+ display_draw(disp[display_sea], gra, gra->gc[GC_WATER_FILL], NULL);
+ display_draw(disp[display_wood], gra, gra->gc[GC_WOOD], NULL);
+ display_draw(disp[display_other], gra, gra->gc[GC_TOWN_FILL], gra->gc[GC_TOWN_LINE]);
+ display_draw(disp[display_other1], gra, gra->gc[GC_BUILDING], NULL);
+ display_draw(disp[display_other2], gra, gra->gc[GC_BUILDING_2], NULL);
+ display_draw(disp[display_other3], gra, gra->gc[GC_PARK], NULL);
+ display_draw(disp[display_water], gra, gra->gc[GC_WATER_FILL], gra->gc[GC_WATER_LINE]);
+ display_draw(disp[display_rail], gra, gra->gc[GC_RAIL], NULL);
+ street_route_draw(co);
+ display_draw(disp[display_street_route], gra, gra->gc[GC_STREET_ROUTE], NULL);
+ if (bw[0]) {
+ display_draw(disp[display_street_no_pass], gra, gra->gc[GC_STREET_SMALL_B], NULL);
+ display_draw(disp[display_street], gra, gra->gc[GC_STREET_SMALL_B], NULL);
+ }
+ if (bw[1])
+ display_draw(disp[display_street1], gra, gra->gc[GC_STREET_MID_B], NULL);
+ if (bw[2])
+ display_draw(disp[display_street2], gra, gra->gc[GC_STREET_BIG_B], NULL);
+ if (bw[3])
+ display_draw(disp[display_street3], gra, gra->gc[GC_STREET_BIG2_B], NULL);
+ if (w[0]) {
+ display_draw(disp[display_street_no_pass], gra, gra->gc[GC_STREET_NO_PASS], NULL);
+ display_draw(disp[display_street], gra, gra->gc[GC_STREET_SMALL], NULL);
+ }
+ if (w[1])
+ display_draw(disp[display_street1], gra, gra->gc[GC_STREET_MID], gra->gc[GC_BLACK]);
+ display_draw(disp[display_street2], gra, gra->gc[GC_STREET_BIG], gra->gc[GC_BLACK]);
+ display_draw(disp[display_street3], gra, gra->gc[GC_STREET_BIG2], gra->gc[GC_BLACK]);
+ if (w[3] > 1)
+ display_draw(disp[display_street3], gra, gra->gc[GC_STREET_BIG2_L], NULL);
+
+ display_draw(disp[display_poi], gra, gra->gc[GC_BLACK], NULL);
+
+
+ profile_timer("display_draw");
+
+ if (scale < 2) {
+ display_labels(disp[display_street], gra, gra->gc[GC_TEXT_FG], gra->gc[GC_TEXT_BG], gra->font[1]);
+ display_labels(disp[display_street1], gra, gra->gc[GC_TEXT_FG], gra->gc[GC_TEXT_BG], gra->font[1]);
+ }
+ else {
+ display_labels(disp[display_street], gra, gra->gc[GC_TEXT_FG], gra->gc[GC_TEXT_BG], gra->font[0]);
+ display_labels(disp[display_street1], gra, gra->gc[GC_TEXT_FG], gra->gc[GC_TEXT_BG], gra->font[0]);
+ }
+ display_labels(disp[display_street2], gra, gra->gc[GC_TEXT_FG], gra->gc[GC_TEXT_BG], gra->font[0]);
+ display_labels(disp[display_street3], gra, gra->gc[GC_TEXT_FG], gra->gc[GC_TEXT_BG], gra->font[0]);
+
+ for (i = display_town+t[1] ; i < display_town+0x10 ; i++)
+ display_labels(disp[i], gra, gra->gc[GC_TEXT_FG], gra->gc[GC_TEXT_BG], gra->font[0]);
+ for (i = display_town+t[0] ; i < display_town+t[1] ; i++)
+ display_labels(disp[i], gra, gra->gc[GC_TEXT_FG], gra->gc[GC_TEXT_BG], gra->font[1]);
+ for (i = display_town ; i < display_town+t[0] ; i++)
+ display_labels(disp[i], gra, gra->gc[GC_TEXT_FG], gra->gc[GC_TEXT_BG], gra->font[2]);
+
+ for (i = display_town ; i < display_town+0x10 ; i++)
+ display_draw(disp[i], gra, gra->gc[GC_BLACK], NULL);
+ display_draw(disp[display_bti], gra, gra->gc[GC_BLACK], NULL);
+ profile_timer("labels");
+ gra->draw_mode(gra, draw_mode_end);
+ for (i = 0 ; i < data_window_type_end; i++) {
+ data_window_end(co->data_window[i]);
+ }
+#if 0
+ map_scrollbars_update(map);
+#endif
+}
+
+void
+graphics_resize(struct container *co, int w, int h)
+{
+ co->trans->width=w;
+ co->trans->height=h;
+ graphics_redraw(co);
+}
diff --git a/graphics.h b/graphics.h
new file mode 100644
index 00000000..43d583dd
--- /dev/null
+++ b/graphics.h
@@ -0,0 +1,48 @@
+
+struct point;
+struct container;
+struct graphics_gc;
+struct graphics_font;
+struct graphics_image_gra;
+
+struct graphics_image {
+ struct graphics_image *next;
+ struct graphics *gr;
+ char *name;
+ int height;
+ int width;
+ struct graphics_image_gra *gra;
+};
+
+void graphics_get_view(struct container *co, long *x, long *y, unsigned long *scale);
+void graphics_set_view(struct container *co, long *x, long *y, unsigned long *scale);
+void graphics_resize(struct container *co, int w, int h);
+void graphics_redraw(struct container *co);
+
+enum draw_mode_num {
+ draw_mode_begin, draw_mode_end, draw_mode_cursor
+};
+
+struct graphics
+{
+ struct graphics_gra *gra;
+ struct graphics_font **font;
+ struct graphics_gc **gc;
+
+ void (*draw_mode)(struct graphics *gr, enum draw_mode_num mode);
+ void (*draw_lines)(struct graphics *gr, struct graphics_gc *gc, struct point *p, int count);
+ void (*draw_polygon)(struct graphics *gr, struct graphics_gc *gc, struct point *p, int count);
+ void (*draw_rectangle)(struct graphics *gr, struct graphics_gc *gc, struct point *p, int w, int h);
+ void (*draw_circle)(struct graphics *gr, struct graphics_gc *gc, struct point *p, int r);
+ void (*draw_text)(struct graphics *gr, struct graphics_gc *fg, struct graphics_gc *bg, struct graphics_font *font, unsigned char *text, struct point *p, int dx, int dy);
+ void (*draw_image)(struct graphics *gr, struct graphics_gc *fg, struct point *p, struct graphics_image *img);
+ void (*draw_restore)(struct graphics *gr, struct point *p, int w, int h);
+
+ struct graphics_font *(*font_new)(struct graphics *gr, int size);
+ struct graphics_gc *(*gc_new)(struct graphics *gr);
+ void (*gc_set_linewidth)(struct graphics_gc *gc, int width);
+ void (*gc_set_foreground)(struct graphics_gc *gc, int r, int g, int b);
+ void (*gc_set_background)(struct graphics_gc *gc, int r, int g, int b);
+ struct graphics_image *(*image_new)(struct graphics *gr, char *path);
+ struct graphics *(*overlay_new)(struct graphics *gr, struct point *p, int w, int h);
+};
diff --git a/gtkext.h b/gtkext.h
new file mode 100644
index 00000000..34059d9b
--- /dev/null
+++ b/gtkext.h
@@ -0,0 +1 @@
+void gdk_gc_set_fill_rule(GdkGC *gc, GdkFillRule fill_rule);
diff --git a/locations.txt b/locations.txt
new file mode 100644
index 00000000..739f93b2
--- /dev/null
+++ b/locations.txt
@@ -0,0 +1 @@
+5231.3734 N 01324.8633 E Berlin Alexanderplatz
diff --git a/log.c b/log.c
new file mode 100644
index 00000000..c6995361
--- /dev/null
+++ b/log.c
@@ -0,0 +1,88 @@
+#include <unistd.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "file.h"
+#include "map_data.h"
+#include "log.h"
+
+void
+log_write(char *message, struct file *file, void *data, int size)
+{
+ char log[4096];
+ unsigned char *l,*p=data;
+
+ int fd=open("log.txt",O_RDWR|O_CREAT|O_APPEND|O_SYNC, 0644);
+ sprintf(log,"# %s\n",message);
+ l=log+strlen(log);
+ sprintf(l, "%s 0x%x ", file->name, p-file->begin);
+ l=log+strlen(log);
+ while (size) {
+ sprintf(l,"%02x ", *p++);
+ l+=3;
+ size--;
+ }
+ *l++='\n';
+ *l='\0';
+ write(fd, log, strlen(log));
+ close(fd);
+}
+
+void
+log_apply(struct map_data *map, int files)
+{
+ char buffer[4096],*p;
+ char *filename, *addr;
+ struct file *file;
+ unsigned char *data;
+ unsigned long dataval;
+ struct map_data *curr;
+ int j;
+
+ FILE *f=fopen("log.txt","r");
+ if (!f)
+ return;
+ while (fgets(buffer, 4096, f)) {
+ if (buffer[0] != '#') {
+ buffer[strlen(buffer)-1]='\0';
+ filename=buffer;
+ p=buffer;
+ while (*p && *p != ' ')
+ p++;
+ if (! *p)
+ continue;
+ *p++=0;
+ file=NULL;
+ curr=map;
+ while (curr) {
+ for(j = 0 ; j < files ; j++) {
+ if (curr->file[j] && !strcmp(curr->file[j]->name, filename)) {
+ file=curr->file[j];
+ break;
+ }
+ }
+ if (file)
+ break;
+ curr=curr->next;
+ }
+ if (file) {
+ addr=p;
+ while (*p && *p != ' ')
+ p++;
+ if (! *p)
+ continue;
+ *p++=0;
+ data=file->begin+strtoul(addr, NULL, 16);
+ while (*p) {
+ dataval=strtoul(p, NULL, 16);
+ *data++=dataval;
+ p+=2;
+ while (*p == ' ')
+ p++;
+ }
+ }
+ }
+ }
+ fclose(f);
+}
diff --git a/log.h b/log.h
new file mode 100644
index 00000000..2bf04429
--- /dev/null
+++ b/log.h
@@ -0,0 +1,2 @@
+void log_write(char *message, struct file *file, void *data, int size);
+void log_apply(struct map_data *map, int files);
diff --git a/main.c b/main.c
new file mode 100644
index 00000000..e2d23554
--- /dev/null
+++ b/main.c
@@ -0,0 +1,80 @@
+#include <locale.h>
+#include <stdio.h>
+#include "coord.h"
+#include "vehicle.h"
+#include "cursor.h"
+#include "speech.h"
+#include "route.h"
+#include "map.h"
+#include "map_data.h"
+#if 0
+#include "map-share.h"
+#endif
+#include "transform.h"
+#include "popup.h"
+#include "plugin.h"
+#include "compass.h"
+#include "container.h"
+
+
+void *speech_handle;
+
+struct container *co;
+
+struct map_data *map_data_default;
+
+struct container *gui_gtk_window(int x, int y, int scale);
+
+extern void test(struct map_data *mdat);
+
+int main(int argc, char **argv)
+{
+ CORBA_Environment ev;
+ CORBA_ORB orb;
+ Map map_client = CORBA_OBJECT_NIL;
+ char *retval;
+ FILE *ior;
+
+ setenv("LC_NUMERIC","C",1);
+ setlocale(LC_ALL,"");
+ setlocale(LC_NUMERIC,"C");
+ gtk_set_locale();
+ setlocale(LC_NUMERIC,"C");
+ gtk_init(&argc, &argv);
+ gdk_rgb_init();
+
+ map_data_default=load_maps(NULL);
+ plugin_load();
+ co=gui_gtk_window(1300000,7000000,8192);
+ co->vehicle=vehicle_new("/tmp/gpsdata");
+ co->cursor=cursor_new(co);
+ co->speech=speech_new();
+ speech_handle=co->speech;
+ co->route=route_new();
+ co->compass=compass_new(co);
+ route_mapdata_set(co->route, co->map_data);
+
+
+#if 0
+ CORBA_exception_init(&ev);
+ orb = CORBA_ORB_init(&argc, argv, "orbit-local-orb", &ev);
+ g_assert(ev._major == CORBA_NO_EXCEPTION);
+
+ map_srv_start_poa(orb, &ev);
+ g_assert(ev._major == CORBA_NO_EXCEPTION);
+ map_client = map_srv_start_object(&ev, map);
+ retval = CORBA_ORB_object_to_string(orb, map_client, &ev);
+ g_assert(ev._major == CORBA_NO_EXCEPTION);
+ ior=fopen("map.ior","w");
+ if (ior) {
+ fprintf(ior, "%s\n", retval);
+ fclose(ior);
+ }
+ CORBA_free(retval);
+#endif
+
+ gtk_main();
+ return 0;
+}
+
+
diff --git a/main.h b/main.h
new file mode 100644
index 00000000..fbf9d73d
--- /dev/null
+++ b/main.h
@@ -0,0 +1 @@
+extern void *speech_handle;
diff --git a/map-common.c b/map-common.c
new file mode 100644
index 00000000..91d27199
--- /dev/null
+++ b/map-common.c
@@ -0,0 +1,442 @@
+/*
+ * This file was generated by orbit-idl-2 - DO NOT EDIT!
+ */
+
+#include <string.h>
+#define ORBIT2_STUBS_API
+#define ORBIT_IDL_C_COMMON
+#define map_COMMON
+#include "map.h"
+
+static const CORBA_unsigned_long ORBit_zero_int = 0;
+
+#ifndef ORBIT_IDL_C_IMODULE_map
+void
+_ORBIT_skel_small_Mappel_Test(POA_Mappel * _o_servant, gpointer _o_retval,
+ gpointer * _o_args, CORBA_Context _o_ctx,
+ CORBA_Environment * _o_ev,
+ void (*_impl_Test) (PortableServer_Servant
+ _servant,
+ CORBA_Environment * ev))
+{
+ _impl_Test(_o_servant, _o_ev);
+}
+
+void
+_ORBIT_skel_small_Map_mapString(POA_Map * _o_servant, gpointer _o_retval,
+ gpointer * _o_args, CORBA_Context _o_ctx,
+ CORBA_Environment * _o_ev,
+ Map(*_impl_mapString) (PortableServer_Servant
+ _servant,
+ const CORBA_char *
+ astring,
+ CORBA_double * anum,
+ CORBA_Environment *
+ ev))
+{
+ *(Map *) _o_retval =
+ _impl_mapString(_o_servant, *(const CORBA_char * *) _o_args[0],
+ *(CORBA_double * *)_o_args[1], _o_ev);
+}
+
+void
+_ORBIT_skel_small_Map_doNothing(POA_Map * _o_servant, gpointer _o_retval,
+ gpointer * _o_args, CORBA_Context _o_ctx,
+ CORBA_Environment * _o_ev,
+ void (*_impl_doNothing)
+ (PortableServer_Servant _servant,
+ CORBA_Environment * ev))
+{
+ _impl_doNothing(_o_servant, _o_ev);
+}
+
+void
+_ORBIT_skel_small_Map_doOneWay(POA_Map * _o_servant, gpointer _o_retval,
+ gpointer * _o_args, CORBA_Context _o_ctx,
+ CORBA_Environment * _o_ev,
+ void (*_impl_doOneWay) (PortableServer_Servant
+ _servant,
+ const CORBA_char *
+ ignore,
+ CORBA_Environment *
+ ev))
+{
+ _impl_doOneWay(_o_servant, *(const CORBA_char * *) _o_args[0], _o_ev);
+}
+
+void
+_ORBIT_skel_small_Map_PlaceFlag(POA_Map * _o_servant, gpointer _o_retval,
+ gpointer * _o_args, CORBA_Context _o_ctx,
+ CORBA_Environment * _o_ev,
+ void (*_impl_PlaceFlag)
+ (PortableServer_Servant _servant,
+ CORBA_Environment * ev))
+{
+ _impl_PlaceFlag(_o_servant, _o_ev);
+}
+
+void
+_ORBIT_skel_small_Map_PointFromCoord(POA_Map * _o_servant, gpointer _o_retval,
+ gpointer * _o_args, CORBA_Context _o_ctx,
+ CORBA_Environment * _o_ev,
+ PointObj(*_impl_PointFromCoord)
+ (PortableServer_Servant _servant,
+ const CORBA_char * coord,
+ CORBA_Environment * ev))
+{
+ *(PointObj *) _o_retval =
+ _impl_PointFromCoord(_o_servant, *(const CORBA_char * *) _o_args[0],
+ _o_ev);
+}
+
+void
+_ORBIT_skel_small_Map_View(POA_Map * _o_servant, gpointer _o_retval,
+ gpointer * _o_args, CORBA_Context _o_ctx,
+ CORBA_Environment * _o_ev,
+ void (*_impl_View) (PortableServer_Servant
+ _servant,
+ const PointObj * where,
+ CORBA_Environment * ev))
+{
+ _impl_View(_o_servant, (const PointObj *) _o_args[0], _o_ev);
+}
+
+void
+_ORBIT_skel_small_Map_ViewAll(POA_Map * _o_servant, gpointer _o_retval,
+ gpointer * _o_args, CORBA_Context _o_ctx,
+ CORBA_Environment * _o_ev,
+ void (*_impl_ViewAll) (PortableServer_Servant
+ _servant,
+ const PointObjSequence *
+ where,
+ CORBA_Environment * ev))
+{
+ _impl_ViewAll(_o_servant, (const CORBA_sequence_PointObj *) _o_args[0],
+ _o_ev);
+}
+
+void
+_ORBIT_skel_small_Map_Route(POA_Map * _o_servant, gpointer _o_retval,
+ gpointer * _o_args, CORBA_Context _o_ctx,
+ CORBA_Environment * _o_ev,
+ void (*_impl_Route) (PortableServer_Servant
+ _servant,
+ const PointObj * src,
+ const PointObj * dst,
+ CORBA_Environment * ev))
+{
+ _impl_Route(_o_servant, (const PointObj *) _o_args[0],
+ (const PointObj *) _o_args[1], _o_ev);
+}
+
+void
+_ORBIT_skel_small_Map_Get(POA_Map * _o_servant, gpointer _o_retval,
+ gpointer * _o_args, CORBA_Context _o_ctx,
+ CORBA_Environment * _o_ev,
+ Mappel(*_impl_Get) (PortableServer_Servant _servant,
+ CORBA_Environment * ev))
+{
+ *(Mappel *) _o_retval = _impl_Get(_o_servant, _o_ev);
+}
+
+#endif
+#if ( (TC_IMPL_TC_PointObj_0 == 'm') \
+&& (TC_IMPL_TC_PointObj_1 == 'a') \
+&& (TC_IMPL_TC_PointObj_2 == 'p') \
+) && !defined(TC_DEF_TC_PointObj)
+#define TC_DEF_TC_PointObj 1
+static const char *anon_subnames_array0[] = { "lng", "lat", "height" };
+static const CORBA_TypeCode anon_subtypes_array1[] =
+ { (CORBA_TypeCode) & TC_CORBA_float_struct,
+(CORBA_TypeCode) & TC_CORBA_float_struct, (CORBA_TypeCode) & TC_CORBA_float_struct };
+#ifdef ORBIT_IDL_C_IMODULE_map
+static
+#endif
+const struct CORBA_TypeCode_struct TC_PointObj_struct = {
+ {&ORBit_TypeCode_epv, ORBIT_REFCOUNT_STATIC},
+ CORBA_tk_struct,
+ 0,
+ 0,
+ ORBIT_ALIGNOF_CORBA_FLOAT,
+ 0,
+ 3,
+ (CORBA_TypeCode *) anon_subtypes_array1,
+ CORBA_OBJECT_NIL,
+ "PointObj",
+ "IDL:PointObj:1.0",
+ (char **) anon_subnames_array0,
+ NULL,
+ -1,
+ 0,
+ 0, 0
+};
+#endif
+#if ( (TC_IMPL_TC_CORBA_sequence_PointObj_0 == 'm') \
+&& (TC_IMPL_TC_CORBA_sequence_PointObj_1 == 'a') \
+&& (TC_IMPL_TC_CORBA_sequence_PointObj_2 == 'p') \
+) && !defined(TC_DEF_TC_CORBA_sequence_PointObj)
+#define TC_DEF_TC_CORBA_sequence_PointObj 1
+static const CORBA_TypeCode anon_subtypes_array4[] =
+ { (CORBA_TypeCode) & TC_PointObj_struct };
+#ifdef ORBIT_IDL_C_IMODULE_map
+static
+#endif
+const struct CORBA_TypeCode_struct TC_CORBA_sequence_PointObj_struct = {
+ {&ORBit_TypeCode_epv, ORBIT_REFCOUNT_STATIC},
+ CORBA_tk_sequence,
+ 0,
+ 0,
+ MAX(ORBIT_ALIGNOF_CORBA_POINTER,
+ MAX(ORBIT_ALIGNOF_CORBA_LONG, MAX(ORBIT_ALIGNOF_CORBA_STRUCT, 1))),
+ 0,
+ 1,
+ (CORBA_TypeCode *) anon_subtypes_array4,
+ CORBA_OBJECT_NIL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ -1,
+ 0,
+ 0, 0
+};
+#endif
+#if ( (TC_IMPL_TC_CORBA_sequence_PointObj_0 == 'm') \
+&& (TC_IMPL_TC_CORBA_sequence_PointObj_1 == 'a') \
+&& (TC_IMPL_TC_CORBA_sequence_PointObj_2 == 'p') \
+) && !defined(TC_DEF_TC_CORBA_sequence_PointObj)
+#define TC_DEF_TC_CORBA_sequence_PointObj 1
+static const CORBA_TypeCode anon_subtypes_array11[] =
+ { (CORBA_TypeCode) & TC_PointObj_struct };
+#ifdef ORBIT_IDL_C_IMODULE_map
+static
+#endif
+const struct CORBA_TypeCode_struct TC_CORBA_sequence_PointObj_struct = {
+ {&ORBit_TypeCode_epv, ORBIT_REFCOUNT_STATIC},
+ CORBA_tk_sequence,
+ 0,
+ 0,
+ MAX(ORBIT_ALIGNOF_CORBA_POINTER,
+ MAX(ORBIT_ALIGNOF_CORBA_LONG, MAX(ORBIT_ALIGNOF_CORBA_STRUCT, 1))),
+ 0,
+ 1,
+ (CORBA_TypeCode *) anon_subtypes_array11,
+ CORBA_OBJECT_NIL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ -1,
+ 0,
+ 0, 0
+};
+#endif
+#if ( (TC_IMPL_TC_PointObjSequence_0 == 'm') \
+&& (TC_IMPL_TC_PointObjSequence_1 == 'a') \
+&& (TC_IMPL_TC_PointObjSequence_2 == 'p') \
+) && !defined(TC_DEF_TC_PointObjSequence)
+#define TC_DEF_TC_PointObjSequence 1
+static const CORBA_TypeCode anon_subtypes_array14[] =
+ { (CORBA_TypeCode) & TC_CORBA_sequence_PointObj_struct };
+#ifdef ORBIT_IDL_C_IMODULE_map
+static
+#endif
+const struct CORBA_TypeCode_struct TC_PointObjSequence_struct = {
+ {&ORBit_TypeCode_epv, ORBIT_REFCOUNT_STATIC},
+ CORBA_tk_alias,
+ 0,
+ 0,
+ MAX(ORBIT_ALIGNOF_CORBA_POINTER,
+ MAX(ORBIT_ALIGNOF_CORBA_LONG, MAX(ORBIT_ALIGNOF_CORBA_STRUCT, 1))),
+ 0,
+ 1,
+ (CORBA_TypeCode *) anon_subtypes_array14,
+ CORBA_OBJECT_NIL,
+ "PointObjSequence",
+ "IDL:PointObjSequence:1.0",
+ NULL,
+ NULL,
+ -1,
+ 0,
+ 0, 0
+};
+#endif
+#if ( (TC_IMPL_TC_Mappel_0 == 'm') \
+&& (TC_IMPL_TC_Mappel_1 == 'a') \
+&& (TC_IMPL_TC_Mappel_2 == 'p') \
+) && !defined(TC_DEF_TC_Mappel)
+#define TC_DEF_TC_Mappel 1
+#ifdef ORBIT_IDL_C_IMODULE_map
+static
+#endif
+const struct CORBA_TypeCode_struct TC_Mappel_struct = {
+ {&ORBit_TypeCode_epv, ORBIT_REFCOUNT_STATIC},
+ CORBA_tk_objref,
+ 0,
+ 0,
+ ORBIT_ALIGNOF_CORBA_POINTER,
+ 0,
+ 0,
+ NULL,
+ CORBA_OBJECT_NIL,
+ "Mappel",
+ "IDL:Mappel:1.0",
+ NULL,
+ NULL,
+ -1,
+ 0,
+ 0, 0
+};
+#endif
+#if ( (TC_IMPL_TC_Map_0 == 'm') \
+&& (TC_IMPL_TC_Map_1 == 'a') \
+&& (TC_IMPL_TC_Map_2 == 'p') \
+) && !defined(TC_DEF_TC_Map)
+#define TC_DEF_TC_Map 1
+#ifdef ORBIT_IDL_C_IMODULE_map
+static
+#endif
+const struct CORBA_TypeCode_struct TC_Map_struct = {
+ {&ORBit_TypeCode_epv, ORBIT_REFCOUNT_STATIC},
+ CORBA_tk_objref,
+ 0,
+ 0,
+ ORBIT_ALIGNOF_CORBA_POINTER,
+ 0,
+ 0,
+ NULL,
+ CORBA_OBJECT_NIL,
+ "Map",
+ "IDL:Map:1.0",
+ NULL,
+ NULL,
+ -1,
+ 0,
+ 0, 0
+};
+#endif
+
+#ifndef ORBIT_IDL_C_IMODULE_map
+CORBA_unsigned_long Mappel__classid = 0;
+#endif
+
+#ifndef ORBIT_IDL_C_IMODULE_map
+CORBA_unsigned_long Map__classid = 0;
+#endif
+
+/* Interface type data */
+
+#ifdef ORBIT_IDL_C_IMODULE_map
+static
+#endif
+ORBit_IMethod Mappel__imethods[] = {
+ {
+ {0, 0, NULL, FALSE},
+ {0, 0, NULL, FALSE},
+ {0, 0, NULL, FALSE},
+ TC_void, "Test", 4,
+ 0}
+};
+static CORBA_string Mappel__base_itypes[] = {
+ "IDL:omg.org/CORBA/Object:1.0"
+};
+
+#ifdef ORBIT_IDL_C_IMODULE_map
+static
+#endif
+ORBit_IInterface Mappel__iinterface = {
+ TC_Mappel, {1, 1, Mappel__imethods, FALSE},
+ {1, 1, Mappel__base_itypes, FALSE}
+};
+
+static ORBit_IArg Map_mapString__arginfo[] = {
+ {TC_CORBA_string, ORBit_I_ARG_IN, "astring"},
+ {TC_CORBA_double, ORBit_I_ARG_OUT | ORBit_I_COMMON_FIXED_SIZE, "anum"}
+};
+static ORBit_IArg Map_doOneWay__arginfo[] = {
+ {TC_CORBA_string, ORBit_I_ARG_IN, "ignore"}
+};
+static ORBit_IArg Map_PointFromCoord__arginfo[] = {
+ {TC_CORBA_string, ORBit_I_ARG_IN, "coord"}
+};
+static ORBit_IArg Map_View__arginfo[] = {
+ {TC_PointObj, ORBit_I_ARG_IN | ORBit_I_COMMON_FIXED_SIZE, "where"}
+};
+static ORBit_IArg Map_ViewAll__arginfo[] = {
+ {TC_PointObjSequence, ORBit_I_ARG_IN, "where"}
+};
+static ORBit_IArg Map_Route__arginfo[] = {
+ {TC_PointObj, ORBit_I_ARG_IN | ORBit_I_COMMON_FIXED_SIZE, "src"},
+ {TC_PointObj, ORBit_I_ARG_IN | ORBit_I_COMMON_FIXED_SIZE, "dst"}
+};
+
+#ifdef ORBIT_IDL_C_IMODULE_map
+static
+#endif
+ORBit_IMethod Map__imethods[] = {
+ {
+ {2, 2, Map_mapString__arginfo, FALSE},
+ {0, 0, NULL, FALSE},
+ {0, 0, NULL, FALSE},
+ TC_Map, "mapString", 9,
+ 0}
+ , {
+ {0, 0, NULL, FALSE},
+ {0, 0, NULL, FALSE},
+ {0, 0, NULL, FALSE},
+ TC_void, "doNothing", 9,
+ 0}
+ , {
+ {1, 1, Map_doOneWay__arginfo, FALSE},
+ {0, 0, NULL, FALSE},
+ {0, 0, NULL, FALSE},
+ TC_void, "doOneWay", 8,
+ 0 | ORBit_I_METHOD_1_WAY}
+ , {
+ {0, 0, NULL, FALSE},
+ {0, 0, NULL, FALSE},
+ {0, 0, NULL, FALSE},
+ TC_void, "PlaceFlag", 9,
+ 0}
+ , {
+ {1, 1, Map_PointFromCoord__arginfo, FALSE},
+ {0, 0, NULL, FALSE},
+ {0, 0, NULL, FALSE},
+ TC_PointObj, "PointFromCoord", 14,
+ 0 | ORBit_I_COMMON_FIXED_SIZE}
+ , {
+ {1, 1, Map_View__arginfo, FALSE},
+ {0, 0, NULL, FALSE},
+ {0, 0, NULL, FALSE},
+ TC_void, "View", 4,
+ 0}
+ , {
+ {1, 1, Map_ViewAll__arginfo, FALSE},
+ {0, 0, NULL, FALSE},
+ {0, 0, NULL, FALSE},
+ TC_void, "ViewAll", 7,
+ 0}
+ , {
+ {2, 2, Map_Route__arginfo, FALSE},
+ {0, 0, NULL, FALSE},
+ {0, 0, NULL, FALSE},
+ TC_void, "Route", 5,
+ 0}
+ , {
+ {0, 0, NULL, FALSE},
+ {0, 0, NULL, FALSE},
+ {0, 0, NULL, FALSE},
+ TC_Mappel, "Get", 3,
+ 0}
+};
+static CORBA_string Map__base_itypes[] = {
+ "IDL:omg.org/CORBA/Object:1.0"
+};
+
+#ifdef ORBIT_IDL_C_IMODULE_map
+static
+#endif
+ORBit_IInterface Map__iinterface = {
+ TC_Map, {9, 9, Map__imethods, FALSE},
+ {1, 1, Map__base_itypes, FALSE}
+};
diff --git a/map-share.h b/map-share.h
new file mode 100644
index 00000000..c540f30e
--- /dev/null
+++ b/map-share.h
@@ -0,0 +1,2 @@
+void map_srv_start_poa(CORBA_ORB orb, CORBA_Environment * ev);
+CORBA_Object map_srv_start_object(CORBA_Environment * ev, struct container *co);
diff --git a/map-skelimpl.c b/map-skelimpl.c
new file mode 100644
index 00000000..890df21c
--- /dev/null
+++ b/map-skelimpl.c
@@ -0,0 +1,286 @@
+/* This is a template file generated by command */
+/* orbit-idl-2 --skeleton-impl map.idl */
+/* User must edit this file, inserting servant */
+/* specific code between markers. */
+
+#include "map.h"
+
+/*** App-specific servant structures ***/
+
+typedef struct
+{
+ POA_Mappel servant;
+ PortableServer_POA poa;
+
+ /* ------ add private attributes here ------ */
+ /* ------ ---------- end ------------ ------ */
+} impl_POA_Mappel;
+
+typedef struct
+{
+ POA_Map servant;
+ PortableServer_POA poa;
+
+ /* ------ add private attributes here ------ */
+ /* ------ ---------- end ------------ ------ */
+} impl_POA_Map;
+
+/*** Implementation stub prototypes ***/
+
+static void impl_Mappel__destroy(impl_POA_Mappel * servant,
+ CORBA_Environment * ev);
+static void
+impl_Mappel_Test(impl_POA_Mappel * servant, CORBA_Environment * ev);
+
+static void impl_Map__destroy(impl_POA_Map * servant, CORBA_Environment * ev);
+static Map
+impl_Map_mapString(impl_POA_Map * servant,
+ const CORBA_char * astring,
+ CORBA_double * anum, CORBA_Environment * ev);
+
+static void
+impl_Map_doNothing(impl_POA_Map * servant, CORBA_Environment * ev);
+
+static void
+impl_Map_doOneWay(impl_POA_Map * servant,
+ const CORBA_char * ignore, CORBA_Environment * ev);
+
+static void
+impl_Map_PlaceFlag(impl_POA_Map * servant, CORBA_Environment * ev);
+
+static PointObj
+impl_Map_PointFromCoord(impl_POA_Map * servant,
+ const CORBA_char * coord, CORBA_Environment * ev);
+
+static void
+impl_Map_View(impl_POA_Map * servant,
+ const PointObj * where, CORBA_Environment * ev);
+
+static void
+impl_Map_ViewAll(impl_POA_Map * servant,
+ const PointObjSequence * where, CORBA_Environment * ev);
+
+static void
+impl_Map_Route(impl_POA_Map * servant,
+ const PointObj * src,
+ const PointObj * dst, CORBA_Environment * ev);
+
+static Mappel impl_Map_Get(impl_POA_Map * servant, CORBA_Environment * ev);
+
+/*** epv structures ***/
+
+static PortableServer_ServantBase__epv impl_Mappel_base_epv = {
+ NULL, /* _private data */
+ (gpointer) & impl_Mappel__destroy, /* finalize routine */
+ NULL, /* default_POA routine */
+};
+static POA_Mappel__epv impl_Mappel_epv = {
+ NULL, /* _private */
+ (gpointer) & impl_Mappel_Test,
+
+};
+static PortableServer_ServantBase__epv impl_Map_base_epv = {
+ NULL, /* _private data */
+ (gpointer) & impl_Map__destroy, /* finalize routine */
+ NULL, /* default_POA routine */
+};
+static POA_Map__epv impl_Map_epv = {
+ NULL, /* _private */
+ (gpointer) & impl_Map_mapString,
+
+ (gpointer) & impl_Map_doNothing,
+
+ (gpointer) & impl_Map_doOneWay,
+
+ (gpointer) & impl_Map_PlaceFlag,
+
+ (gpointer) & impl_Map_PointFromCoord,
+
+ (gpointer) & impl_Map_View,
+
+ (gpointer) & impl_Map_ViewAll,
+
+ (gpointer) & impl_Map_Route,
+
+ (gpointer) & impl_Map_Get,
+
+};
+
+/*** vepv structures ***/
+
+static POA_Mappel__vepv impl_Mappel_vepv = {
+ &impl_Mappel_base_epv,
+ &impl_Mappel_epv,
+};
+static POA_Map__vepv impl_Map_vepv = {
+ &impl_Map_base_epv,
+ &impl_Map_epv,
+};
+
+/*** Stub implementations ***/
+
+static Mappel
+impl_Mappel__create(PortableServer_POA poa, CORBA_Environment * ev)
+{
+ Mappel retval;
+ impl_POA_Mappel *newservant;
+ PortableServer_ObjectId *objid;
+
+ newservant = g_new0(impl_POA_Mappel, 1);
+ newservant->servant.vepv = &impl_Mappel_vepv;
+ newservant->poa =
+ (PortableServer_POA) CORBA_Object_duplicate((CORBA_Object) poa, ev);
+ POA_Mappel__init((PortableServer_Servant) newservant, ev);
+ /* Before servant is going to be activated all
+ * private attributes must be initialized. */
+
+ /* ------ init private attributes here ------ */
+ /* ------ ---------- end ------------- ------ */
+
+ objid = PortableServer_POA_activate_object(poa, newservant, ev);
+ CORBA_free(objid);
+ retval = PortableServer_POA_servant_to_reference(poa, newservant, ev);
+
+ return retval;
+}
+
+static void
+impl_Mappel__destroy(impl_POA_Mappel * servant, CORBA_Environment * ev)
+{
+ CORBA_Object_release((CORBA_Object) servant->poa, ev);
+
+ /* No further remote method calls are delegated to
+ * servant and you may free your private attributes. */
+ /* ------ free private attributes here ------ */
+ /* ------ ---------- end ------------- ------ */
+
+ POA_Mappel__fini((PortableServer_Servant) servant, ev);
+}
+
+static void
+impl_Mappel_Test(impl_POA_Mappel * servant, CORBA_Environment * ev)
+{
+ /* ------ insert method code here ------ */
+ /* ------ ---------- end ------------ ------ */
+}
+
+static Map
+impl_Map__create(PortableServer_POA poa, CORBA_Environment * ev)
+{
+ Map retval;
+ impl_POA_Map *newservant;
+ PortableServer_ObjectId *objid;
+
+ newservant = g_new0(impl_POA_Map, 1);
+ newservant->servant.vepv = &impl_Map_vepv;
+ newservant->poa =
+ (PortableServer_POA) CORBA_Object_duplicate((CORBA_Object) poa, ev);
+ POA_Map__init((PortableServer_Servant) newservant, ev);
+ /* Before servant is going to be activated all
+ * private attributes must be initialized. */
+
+ /* ------ init private attributes here ------ */
+ /* ------ ---------- end ------------- ------ */
+
+ objid = PortableServer_POA_activate_object(poa, newservant, ev);
+ CORBA_free(objid);
+ retval = PortableServer_POA_servant_to_reference(poa, newservant, ev);
+
+ return retval;
+}
+
+static void
+impl_Map__destroy(impl_POA_Map * servant, CORBA_Environment * ev)
+{
+ CORBA_Object_release((CORBA_Object) servant->poa, ev);
+
+ /* No further remote method calls are delegated to
+ * servant and you may free your private attributes. */
+ /* ------ free private attributes here ------ */
+ /* ------ ---------- end ------------- ------ */
+
+ POA_Map__fini((PortableServer_Servant) servant, ev);
+}
+
+static Map
+impl_Map_mapString(impl_POA_Map * servant,
+ const CORBA_char * astring,
+ CORBA_double * anum, CORBA_Environment * ev)
+{
+ Map retval;
+
+ /* ------ insert method code here ------ */
+ /* ------ ---------- end ------------ ------ */
+
+ return retval;
+}
+
+static void
+impl_Map_doNothing(impl_POA_Map * servant, CORBA_Environment * ev)
+{
+ /* ------ insert method code here ------ */
+ /* ------ ---------- end ------------ ------ */
+}
+
+static void
+impl_Map_doOneWay(impl_POA_Map * servant,
+ const CORBA_char * ignore, CORBA_Environment * ev)
+{
+ /* ------ insert method code here ------ */
+ /* ------ ---------- end ------------ ------ */
+}
+
+static void
+impl_Map_PlaceFlag(impl_POA_Map * servant, CORBA_Environment * ev)
+{
+ /* ------ insert method code here ------ */
+ /* ------ ---------- end ------------ ------ */
+}
+
+static PointObj
+impl_Map_PointFromCoord(impl_POA_Map * servant,
+ const CORBA_char * coord, CORBA_Environment * ev)
+{
+ PointObj retval;
+
+ /* ------ insert method code here ------ */
+ /* ------ ---------- end ------------ ------ */
+
+ return retval;
+}
+
+static void
+impl_Map_View(impl_POA_Map * servant,
+ const PointObj * where, CORBA_Environment * ev)
+{
+ /* ------ insert method code here ------ */
+ /* ------ ---------- end ------------ ------ */
+}
+
+static void
+impl_Map_ViewAll(impl_POA_Map * servant,
+ const PointObjSequence * where, CORBA_Environment * ev)
+{
+ /* ------ insert method code here ------ */
+ /* ------ ---------- end ------------ ------ */
+}
+
+static void
+impl_Map_Route(impl_POA_Map * servant,
+ const PointObj * src,
+ const PointObj * dst, CORBA_Environment * ev)
+{
+ /* ------ insert method code here ------ */
+ /* ------ ---------- end ------------ ------ */
+}
+
+static Mappel
+impl_Map_Get(impl_POA_Map * servant, CORBA_Environment * ev)
+{
+ Mappel retval;
+
+ /* ------ insert method code here ------ */
+ /* ------ ---------- end ------------ ------ */
+
+ return retval;
+}
diff --git a/map-skels.c b/map-skels.c
new file mode 100644
index 00000000..bcc99254
--- /dev/null
+++ b/map-skels.c
@@ -0,0 +1,184 @@
+/*
+ * This file was generated by orbit-idl-2 - DO NOT EDIT!
+ */
+
+#include <string.h>
+#define ORBIT2_STUBS_API
+#include "map.h"
+
+static ORBitSmallSkeleton
+get_skel_small_Mappel(POA_Mappel * servant,
+ const char *opname, gpointer * m_data, gpointer * impl)
+{
+ switch (opname[0]) {
+ case 'T':
+ if (strcmp((opname + 1), "est"))
+ break;
+ *impl = (gpointer) servant->vepv->Mappel_epv->Test;
+ *m_data = (gpointer) & Mappel__iinterface.methods._buffer[0];
+ return (ORBitSmallSkeleton) _ORBIT_skel_small_Mappel_Test;
+ break;
+ default:
+ break;
+ }
+ return NULL;
+}
+
+void
+POA_Mappel__init(PortableServer_Servant servant, CORBA_Environment * env)
+{
+ static PortableServer_ClassInfo class_info =
+ { NULL, (ORBit_small_impl_finder) & get_skel_small_Mappel,
+"IDL:Mappel:1.0", &Mappel__classid, NULL, &Mappel__iinterface };
+ PortableServer_ServantBase__init(((PortableServer_ServantBase *) servant),
+ env);
+ ORBit_skel_class_register(&class_info, servant, POA_Mappel__fini,
+ ORBIT_VEPV_OFFSET(POA_Mappel__vepv, Mappel_epv),
+ (CORBA_unsigned_long) 0);
+}
+
+void
+POA_Mappel__fini(PortableServer_Servant servant, CORBA_Environment * env)
+{
+ PortableServer_ServantBase__fini(servant, env);
+}
+
+static ORBitSmallSkeleton
+get_skel_small_Map(POA_Map * servant,
+ const char *opname, gpointer * m_data, gpointer * impl)
+{
+ switch (opname[0]) {
+ case 'G':
+ if (strcmp((opname + 1), "et"))
+ break;
+ *impl = (gpointer) servant->vepv->Map_epv->Get;
+ *m_data = (gpointer) & Map__iinterface.methods._buffer[8];
+ return (ORBitSmallSkeleton) _ORBIT_skel_small_Map_Get;
+ break;
+ case 'P':
+ switch (opname[1]) {
+ case 'l':
+ if (strcmp((opname + 2), "aceFlag"))
+ break;
+ *impl = (gpointer) servant->vepv->Map_epv->PlaceFlag;
+ *m_data = (gpointer) & Map__iinterface.methods._buffer[3];
+ return (ORBitSmallSkeleton) _ORBIT_skel_small_Map_PlaceFlag;
+ break;
+ case 'o':
+ if (strcmp((opname + 2), "intFromCoord"))
+ break;
+ *impl = (gpointer) servant->vepv->Map_epv->PointFromCoord;
+ *m_data = (gpointer) & Map__iinterface.methods._buffer[4];
+ return (ORBitSmallSkeleton) _ORBIT_skel_small_Map_PointFromCoord;
+ break;
+ default:
+ break;
+ }
+ break;
+ case 'R':
+ if (strcmp((opname + 1), "oute"))
+ break;
+ *impl = (gpointer) servant->vepv->Map_epv->Route;
+ *m_data = (gpointer) & Map__iinterface.methods._buffer[7];
+ return (ORBitSmallSkeleton) _ORBIT_skel_small_Map_Route;
+ break;
+ case 'V':
+ switch (opname[1]) {
+ case 'i':
+ switch (opname[2]) {
+ case 'e':
+ switch (opname[3]) {
+ case 'w':
+ switch (opname[4]) {
+ case '\0':
+ *impl = (gpointer) servant->vepv->Map_epv->View;
+ *m_data =
+ (gpointer) & Map__iinterface.methods.
+ _buffer[5];
+ return (ORBitSmallSkeleton)
+ _ORBIT_skel_small_Map_View;
+ break;
+ case 'A':
+ if (strcmp((opname + 5), "ll"))
+ break;
+ *impl =
+ (gpointer) servant->vepv->Map_epv->ViewAll;
+ *m_data =
+ (gpointer) & Map__iinterface.methods.
+ _buffer[6];
+ return (ORBitSmallSkeleton)
+ _ORBIT_skel_small_Map_ViewAll;
+ break;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ break;
+ case 'd':
+ switch (opname[1]) {
+ case 'o':
+ switch (opname[2]) {
+ case 'N':
+ if (strcmp((opname + 3), "othing"))
+ break;
+ *impl = (gpointer) servant->vepv->Map_epv->doNothing;
+ *m_data = (gpointer) & Map__iinterface.methods._buffer[1];
+ return (ORBitSmallSkeleton) _ORBIT_skel_small_Map_doNothing;
+ break;
+ case 'O':
+ if (strcmp((opname + 3), "neWay"))
+ break;
+ *impl = (gpointer) servant->vepv->Map_epv->doOneWay;
+ *m_data = (gpointer) & Map__iinterface.methods._buffer[2];
+ return (ORBitSmallSkeleton) _ORBIT_skel_small_Map_doOneWay;
+ break;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ break;
+ case 'm':
+ if (strcmp((opname + 1), "apString"))
+ break;
+ *impl = (gpointer) servant->vepv->Map_epv->mapString;
+ *m_data = (gpointer) & Map__iinterface.methods._buffer[0];
+ return (ORBitSmallSkeleton) _ORBIT_skel_small_Map_mapString;
+ break;
+ default:
+ break;
+ }
+ return NULL;
+}
+
+void
+POA_Map__init(PortableServer_Servant servant, CORBA_Environment * env)
+{
+ static PortableServer_ClassInfo class_info =
+ { NULL, (ORBit_small_impl_finder) & get_skel_small_Map, "IDL:Map:1.0",
+&Map__classid, NULL, &Map__iinterface };
+ PortableServer_ServantBase__init(((PortableServer_ServantBase *) servant),
+ env);
+ ORBit_skel_class_register(&class_info, servant, POA_Map__fini,
+ ORBIT_VEPV_OFFSET(POA_Map__vepv, Map_epv),
+ (CORBA_unsigned_long) 0);
+}
+
+void
+POA_Map__fini(PortableServer_Servant servant, CORBA_Environment * env)
+{
+ PortableServer_ServantBase__fini(servant, env);
+}
diff --git a/map-srv.c b/map-srv.c
new file mode 100644
index 00000000..6d38db03
--- /dev/null
+++ b/map-srv.c
@@ -0,0 +1,262 @@
+/*
+ * CORBA map test
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2, or (at your option) any
+ * later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Author: Elliot Lee <sopwith@redhat.com>
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include "map.h"
+#include "coord.h"
+#include "route.h"
+#include "transform.h"
+#include "statusbar.h"
+#include "map-share.h"
+#include "main.h"
+#include <math.h>
+
+/**
+ This is used by map-server.c and map-local.c
+ It uses map-skels.c
+**/
+
+static Map the_map_client;
+static CORBA_ORB the_orb;
+static PortableServer_POA the_poa;
+static PortableServer_ObjectId *the_objid;
+
+#if 0
+static GtkMap *global_map;
+#endif
+
+static CORBA_Object
+do_mapString(PortableServer_Servant servant,
+ const CORBA_char * astring,
+ CORBA_double * outnum, CORBA_Environment * ev)
+{
+
+ g_message("[server] %s", astring);
+
+ *outnum = rand() % 100;
+
+ return CORBA_Object_duplicate(the_map_client, ev);
+}
+
+static void
+do_PlaceFlag(PortableServer_Servant servant, CORBA_Environment * ev)
+{
+
+ g_message("[server PlaceFlag]");
+
+}
+
+
+static void
+do_doNothing(PortableServer_Servant servant, CORBA_Environment * ev)
+{
+}
+
+PortableServer_ServantBase__epv base_epv = {
+ NULL,
+ NULL,
+ NULL
+};
+
+PointObj
+do_PointFromCoord(PortableServer_Servant _servant, const CORBA_char * coord, CORBA_Environment * ev)
+{
+ PointObj ret;
+ double lat,lng,lat_deg,lng_deg;
+ char lat_c,lng_c;
+
+ printf("String=%s\n", coord);
+ sscanf(coord,"%lf %c %lf %c",&lat, &lat_c, &lng, &lng_c);
+
+ printf("lat=%f lng=%f\n", lat, lng);
+
+ lat_deg=floor(lat/100);
+ lat-=lat_deg*100;
+ lat_deg+=lat/60;
+
+ lng_deg=floor(lng/100);
+ lng-=lng_deg*100;
+ lng_deg+=lng/60;
+
+ ret.lat=lat_deg;
+ ret.lng=lng_deg;
+ printf("lat_deg=%f lng_deg=%f\n", lat_deg, lng_deg);
+
+ ret.height=0;
+ return ret;
+}
+
+static void
+PointObj_to_coor(const PointObj *pnt, struct coord *c)
+{
+ double lng, lat;
+ lng=pnt->lng;
+ lat=pnt->lat;
+ transform_mercator(&lng, &lat, c);
+}
+
+void
+do_View(PortableServer_Servant _servant, const PointObj *pnt, CORBA_Environment * ev)
+{
+ unsigned long scale;
+ struct coord c;
+#if 0
+ GtkMap *map=global_map;
+
+ map_get_view(map, NULL, NULL, &scale);
+ PointObj_to_coor(pnt, &c);
+ map_set_view(map, c.x, c.y, scale);
+#endif
+}
+
+
+void
+do_Route(PortableServer_Servant _servant, const PointObj *src, const PointObj *dst, CORBA_Environment * ev)
+{
+#if 0
+ struct coord c_src,c_dst;
+ GtkMap *map=global_map;
+ unsigned long scale;
+
+ PointObj_to_coor(src, &c_src);
+ PointObj_to_coor(dst, &c_dst);
+ route_set_position(map->container->route, &c_src);
+ route_set_destination(map->container->route, &c_dst);
+
+ map_get_view(map, NULL, NULL, &scale);
+ map_set_view(map, c_src.x, c_src.y, scale);
+
+ if (map->container->statusbar && map->container->statusbar->statusbar_route_update)
+ map->container->statusbar->statusbar_route_update(map->container->statusbar, map->container->route);
+#endif
+}
+
+POA_Mappel__epv mappel_epv = {
+};
+
+Mappel do_Get(PortableServer_Servant _servant, CORBA_Environment * ev)
+{
+ Mappel retval=NULL;
+#if 0
+ impl_POA_Mappel *newservant;
+ PortableServer_ObjectId *objid;
+
+ printf("Do_Get\n");
+ newservant = g_new0(impl_POA_Mappel, 1);
+ newservant->servant.vepv = &mappel_epv;
+ newservant->poa = poa;
+ POA_Mappel__init((PortableServer_Servant) newservant, ev);
+ objid = PortableServer_POA_activate_object(poa, newservant, ev);
+ CORBA_free(objid);
+ retval = PortableServer_POA_servant_to_reference(poa, newservant, ev);
+#endif
+
+ return retval;
+}
+
+POA_Map__epv map_epv = {
+ mapString: do_mapString,
+ doNothing: do_doNothing,
+ PlaceFlag: do_PlaceFlag,
+ PointFromCoord: do_PointFromCoord,
+ View: do_View,
+ Route: do_Route,
+ Get: do_Get,
+ };
+POA_Map__vepv poa_map_vepv = { &base_epv, &map_epv };
+POA_Map poa_map_servant = { NULL, &poa_map_vepv };
+
+
+void map_srv_start_poa(CORBA_ORB orb, CORBA_Environment * ev)
+{
+ PortableServer_POAManager mgr;
+
+ the_orb = orb;
+ the_poa = (PortableServer_POA)
+ CORBA_ORB_resolve_initial_references(orb, "RootPOA", ev);
+
+ mgr = PortableServer_POA__get_the_POAManager(the_poa, ev);
+ PortableServer_POAManager_activate(mgr, ev);
+ CORBA_Object_release((CORBA_Object) mgr, ev);
+}
+
+CORBA_Object map_srv_start_object(CORBA_Environment * ev, struct container *co)
+{
+ POA_Map__init(&poa_map_servant, ev);
+ if (ev->_major) {
+ printf("object__init failed: %d\n", ev->_major);
+ exit(1);
+ }
+ the_objid = PortableServer_POA_activate_object(the_poa,
+ &poa_map_servant,
+ ev);
+ if (ev->_major) {
+ printf("activate_object failed: %d\n", ev->_major);
+ exit(1);
+ }
+ the_map_client = PortableServer_POA_servant_to_reference(the_poa,
+ &poa_map_servant,
+ ev);
+ if (ev->_major) {
+ printf("servant_to_reference failed: %d\n", ev->_major);
+ exit(1);
+ }
+#if 0
+ global_map=map;
+#endif
+ return the_map_client;
+}
+
+void map_srv_finish_object(CORBA_Environment * ev)
+{
+ CORBA_Object_release(the_map_client, ev);
+ if (ev->_major) {
+ printf("object_release failed: %d\n", ev->_major);
+ exit(1);
+ }
+ the_map_client = 0;
+ PortableServer_POA_deactivate_object(the_poa, the_objid, ev);
+ if (ev->_major) {
+ printf("deactivate_object failed: %d\n", ev->_major);
+ exit(1);
+ }
+ CORBA_free(the_objid);
+ the_objid = 0;
+ POA_Map__fini(&poa_map_servant, ev);
+ if (ev->_major) {
+ printf("object__fini failed: %d\n", ev->_major);
+ exit(1);
+ }
+}
+
+
+void map_srv_finish_poa(CORBA_Environment * ev)
+{
+ CORBA_Object_release((CORBA_Object) the_poa, ev);
+ if (ev->_major) {
+ printf("POA release failed: %d\n", ev->_major);
+ exit(1);
+ }
+ the_poa = 0;
+}
+
diff --git a/map-stubs.c b/map-stubs.c
new file mode 100644
index 00000000..fa7d0f34
--- /dev/null
+++ b/map-stubs.c
@@ -0,0 +1,135 @@
+/*
+ * This file was generated by orbit-idl-2 - DO NOT EDIT!
+ */
+
+#include <string.h>
+#define ORBIT2_STUBS_API
+#include "map.h"
+
+void
+Mappel_Test(Mappel _obj, CORBA_Environment * ev)
+{
+ ORBit_c_stub_invoke(_obj, &Mappel__iinterface.methods, 0, NULL, NULL, NULL,
+ ev, Mappel__classid, G_STRUCT_OFFSET(POA_Mappel__epv,
+ Test),
+ (ORBitSmallSkeleton) _ORBIT_skel_small_Mappel_Test);
+
+}
+
+Map
+Map_mapString(Map _obj, const CORBA_char * astring, CORBA_double * anum,
+ CORBA_Environment * ev)
+{
+ Map _ORBIT_retval;
+ gpointer _args[2];
+
+ _args[0] = (gpointer) & astring;
+ _args[1] = &anum;
+ ORBit_c_stub_invoke(_obj, &Map__iinterface.methods, 0, &_ORBIT_retval,
+ _args, NULL, ev, Map__classid,
+ G_STRUCT_OFFSET(POA_Map__epv, mapString),
+ (ORBitSmallSkeleton) _ORBIT_skel_small_Map_mapString);
+
+ return _ORBIT_retval;
+}
+
+void
+Map_doNothing(Map _obj, CORBA_Environment * ev)
+{
+ ORBit_c_stub_invoke(_obj, &Map__iinterface.methods, 1, NULL, NULL, NULL,
+ ev, Map__classid, G_STRUCT_OFFSET(POA_Map__epv,
+ doNothing),
+ (ORBitSmallSkeleton) _ORBIT_skel_small_Map_doNothing);
+
+}
+
+void
+Map_doOneWay(Map _obj, const CORBA_char * ignore, CORBA_Environment * ev)
+{
+ gpointer _args[1];
+
+ _args[0] = (gpointer) & ignore;
+ ORBit_c_stub_invoke(_obj, &Map__iinterface.methods, 2, NULL, _args, NULL,
+ ev, Map__classid, G_STRUCT_OFFSET(POA_Map__epv,
+ doOneWay),
+ (ORBitSmallSkeleton) _ORBIT_skel_small_Map_doOneWay);
+
+}
+
+void
+Map_PlaceFlag(Map _obj, CORBA_Environment * ev)
+{
+ ORBit_c_stub_invoke(_obj, &Map__iinterface.methods, 3, NULL, NULL, NULL,
+ ev, Map__classid, G_STRUCT_OFFSET(POA_Map__epv,
+ PlaceFlag),
+ (ORBitSmallSkeleton) _ORBIT_skel_small_Map_PlaceFlag);
+
+}
+
+PointObj
+Map_PointFromCoord(Map _obj, const CORBA_char * coord, CORBA_Environment * ev)
+{
+ PointObj _ORBIT_retval;
+ gpointer _args[1];
+
+ _args[0] = (gpointer) & coord;
+ ORBit_c_stub_invoke(_obj, &Map__iinterface.methods, 4, &_ORBIT_retval,
+ _args, NULL, ev, Map__classid,
+ G_STRUCT_OFFSET(POA_Map__epv, PointFromCoord),
+ (ORBitSmallSkeleton)
+ _ORBIT_skel_small_Map_PointFromCoord);
+
+ return _ORBIT_retval;
+}
+
+void
+Map_View(Map _obj, const PointObj * where, CORBA_Environment * ev)
+{
+ gpointer _args[1];
+
+ _args[0] = (gpointer) where;
+ ORBit_c_stub_invoke(_obj, &Map__iinterface.methods, 5, NULL, _args, NULL,
+ ev, Map__classid, G_STRUCT_OFFSET(POA_Map__epv, View),
+ (ORBitSmallSkeleton) _ORBIT_skel_small_Map_View);
+
+}
+
+void
+Map_ViewAll(Map _obj, const PointObjSequence * where, CORBA_Environment * ev)
+{
+ gpointer _args[1];
+
+ _args[0] = (gpointer) where;
+ ORBit_c_stub_invoke(_obj, &Map__iinterface.methods, 6, NULL, _args, NULL,
+ ev, Map__classid, G_STRUCT_OFFSET(POA_Map__epv,
+ ViewAll),
+ (ORBitSmallSkeleton) _ORBIT_skel_small_Map_ViewAll);
+
+}
+
+void
+Map_Route(Map _obj, const PointObj * src, const PointObj * dst,
+ CORBA_Environment * ev)
+{
+ gpointer _args[2];
+
+ _args[0] = (gpointer) src;
+ _args[1] = (gpointer) dst;
+ ORBit_c_stub_invoke(_obj, &Map__iinterface.methods, 7, NULL, _args, NULL,
+ ev, Map__classid, G_STRUCT_OFFSET(POA_Map__epv, Route),
+ (ORBitSmallSkeleton) _ORBIT_skel_small_Map_Route);
+
+}
+
+Mappel
+Map_Get(Map _obj, CORBA_Environment * ev)
+{
+ Mappel _ORBIT_retval;
+
+ ORBit_c_stub_invoke(_obj, &Map__iinterface.methods, 8, &_ORBIT_retval,
+ NULL, NULL, ev, Map__classid,
+ G_STRUCT_OFFSET(POA_Map__epv, Get),
+ (ORBitSmallSkeleton) _ORBIT_skel_small_Map_Get);
+
+ return _ORBIT_retval;
+}
diff --git a/map.h b/map.h
new file mode 100644
index 00000000..2ffa914b
--- /dev/null
+++ b/map.h
@@ -0,0 +1,341 @@
+/*
+ * This file was generated by orbit-idl-2 - DO NOT EDIT!
+ */
+
+#ifndef map_H
+#define map_H 1
+#include <glib.h>
+#define ORBIT_IDL_SERIAL 20
+#include <orbit/orbit-types.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+/** typedefs **/
+#if !defined(_PointObj_defined)
+#define _PointObj_defined 1
+ typedef struct PointObj_type PointObj;
+ struct PointObj_type
+ {
+ CORBA_float lng;
+ CORBA_float lat;
+ CORBA_float height;
+ };
+
+#if !defined(TC_IMPL_TC_PointObj_0)
+#define TC_IMPL_TC_PointObj_0 'm'
+#define TC_IMPL_TC_PointObj_1 'a'
+#define TC_IMPL_TC_PointObj_2 'p'
+#ifdef ORBIT_IDL_C_IMODULE_map
+ static
+#else
+ extern
+#endif
+ const struct CORBA_TypeCode_struct TC_PointObj_struct;
+#define TC_PointObj ((CORBA_TypeCode)&TC_PointObj_struct)
+#endif
+#define PointObj__alloc() ((PointObj *)ORBit_small_alloc (TC_PointObj))
+#define PointObj__freekids(m,d) ORBit_small_freekids (TC_PointObj,(m),(d))
+#endif
+#if !defined(ORBIT_DECL_CORBA_sequence_PointObj)
+#define ORBIT_DECL_CORBA_sequence_PointObj 1
+#define ORBIT_IMPL_CORBA_sequence_PointObj_0 'm'
+#define ORBIT_IMPL_CORBA_sequence_PointObj_1 'a'
+#define ORBIT_IMPL_CORBA_sequence_PointObj_2 'p'
+#if !defined(_CORBA_sequence_PointObj_defined)
+#define _CORBA_sequence_PointObj_defined 1
+ typedef struct
+ {
+ CORBA_unsigned_long _maximum,
+ _length;
+ PointObj *_buffer;
+ CORBA_boolean _release;
+ } CORBA_sequence_PointObj;
+#endif
+#if !defined(TC_IMPL_TC_CORBA_sequence_PointObj_0)
+#define TC_IMPL_TC_CORBA_sequence_PointObj_0 'm'
+#define TC_IMPL_TC_CORBA_sequence_PointObj_1 'a'
+#define TC_IMPL_TC_CORBA_sequence_PointObj_2 'p'
+#ifdef ORBIT_IDL_C_IMODULE_map
+ static
+#else
+ extern
+#endif
+ const struct CORBA_TypeCode_struct TC_CORBA_sequence_PointObj_struct;
+#define TC_CORBA_sequence_PointObj ((CORBA_TypeCode)&TC_CORBA_sequence_PointObj_struct)
+#endif
+#define CORBA_sequence_PointObj__alloc() ((CORBA_sequence_PointObj *)ORBit_small_alloc (TC_CORBA_sequence_PointObj))
+#define CORBA_sequence_PointObj__freekids(m,d) ORBit_small_freekids (TC_CORBA_sequence_PointObj,(m),(d))
+#define CORBA_sequence_PointObj_allocbuf(l) ((PointObj*)ORBit_small_allocbuf (TC_CORBA_sequence_PointObj, (l)))
+#define CORBA_sequence_PointObj_allocbuf(l) ((PointObj*)ORBit_small_allocbuf (TC_CORBA_sequence_PointObj, (l)))
+#endif
+#if !defined(_PointObjSequence_defined)
+#define _PointObjSequence_defined 1
+ typedef CORBA_sequence_PointObj PointObjSequence;
+#define PointObjSequence_marshal(x,y,z) CORBA_sequence_PointObj_marshal((x),(y),(z))
+#define PointObjSequence_demarshal(x,y,z,i) CORBA_sequence_PointObj_demarshal((x),(y),(z),(i))
+#if !defined(TC_IMPL_TC_PointObjSequence_0)
+#define TC_IMPL_TC_PointObjSequence_0 'm'
+#define TC_IMPL_TC_PointObjSequence_1 'a'
+#define TC_IMPL_TC_PointObjSequence_2 'p'
+#ifdef ORBIT_IDL_C_IMODULE_map
+ static
+#else
+ extern
+#endif
+ const struct CORBA_TypeCode_struct TC_PointObjSequence_struct;
+#define TC_PointObjSequence ((CORBA_TypeCode)&TC_PointObjSequence_struct)
+#endif
+#define PointObjSequence__alloc() ((PointObjSequence *)ORBit_small_alloc (TC_CORBA_sequence_PointObj))
+#define PointObjSequence__freekids(m,d) ORBit_small_freekids (TC_CORBA_sequence_PointObj,(m),(d))
+#define PointObjSequence_allocbuf(l) ((PointObj*)ORBit_small_allocbuf (TC_CORBA_sequence_PointObj, (l)))
+#endif
+#if !defined(ORBIT_DECL_Mappel) && !defined(_Mappel_defined)
+#define ORBIT_DECL_Mappel 1
+#define _Mappel_defined 1
+#define Mappel__freekids CORBA_Object__freekids
+ typedef CORBA_Object Mappel;
+ extern CORBA_unsigned_long Mappel__classid;
+#if !defined(TC_IMPL_TC_Mappel_0)
+#define TC_IMPL_TC_Mappel_0 'm'
+#define TC_IMPL_TC_Mappel_1 'a'
+#define TC_IMPL_TC_Mappel_2 'p'
+#ifdef ORBIT_IDL_C_IMODULE_map
+ static
+#else
+ extern
+#endif
+ const struct CORBA_TypeCode_struct TC_Mappel_struct;
+#define TC_Mappel ((CORBA_TypeCode)&TC_Mappel_struct)
+#endif
+#endif
+#if !defined(ORBIT_DECL_Map) && !defined(_Map_defined)
+#define ORBIT_DECL_Map 1
+#define _Map_defined 1
+#define Map__freekids CORBA_Object__freekids
+ typedef CORBA_Object Map;
+ extern CORBA_unsigned_long Map__classid;
+#if !defined(TC_IMPL_TC_Map_0)
+#define TC_IMPL_TC_Map_0 'm'
+#define TC_IMPL_TC_Map_1 'a'
+#define TC_IMPL_TC_Map_2 'p'
+#ifdef ORBIT_IDL_C_IMODULE_map
+ static
+#else
+ extern
+#endif
+ const struct CORBA_TypeCode_struct TC_Map_struct;
+#define TC_Map ((CORBA_TypeCode)&TC_Map_struct)
+#endif
+#endif
+
+/** POA structures **/
+#ifndef _defined_POA_Mappel
+#define _defined_POA_Mappel 1
+ typedef struct
+ {
+ void *_private;
+ void (*Test) (PortableServer_Servant _servant, CORBA_Environment * ev);
+ } POA_Mappel__epv;
+ typedef struct
+ {
+ PortableServer_ServantBase__epv *_base_epv;
+ POA_Mappel__epv *Mappel_epv;
+ } POA_Mappel__vepv;
+ typedef struct
+ {
+ void *_private;
+ POA_Mappel__vepv *vepv;
+ } POA_Mappel;
+ extern void POA_Mappel__init(PortableServer_Servant servant,
+ CORBA_Environment * ev);
+ extern void POA_Mappel__fini(PortableServer_Servant servant,
+ CORBA_Environment * ev);
+#endif /* _defined_POA_Mappel */
+#ifndef _defined_POA_Map
+#define _defined_POA_Map 1
+ typedef struct
+ {
+ void *_private;
+ Map(*mapString) (PortableServer_Servant _servant,
+ const CORBA_char * astring, CORBA_double * anum,
+ CORBA_Environment * ev);
+ void (*doNothing) (PortableServer_Servant _servant,
+ CORBA_Environment * ev);
+ void (*doOneWay) (PortableServer_Servant _servant,
+ const CORBA_char * ignore, CORBA_Environment * ev);
+ void (*PlaceFlag) (PortableServer_Servant _servant,
+ CORBA_Environment * ev);
+ PointObj(*PointFromCoord) (PortableServer_Servant _servant,
+ const CORBA_char * coord,
+ CORBA_Environment * ev);
+ void (*View) (PortableServer_Servant _servant, const PointObj * where,
+ CORBA_Environment * ev);
+ void (*ViewAll) (PortableServer_Servant _servant,
+ const PointObjSequence * where,
+ CORBA_Environment * ev);
+ void (*Route) (PortableServer_Servant _servant, const PointObj * src,
+ const PointObj * dst, CORBA_Environment * ev);
+ Mappel(*Get) (PortableServer_Servant _servant, CORBA_Environment * ev);
+ } POA_Map__epv;
+ typedef struct
+ {
+ PortableServer_ServantBase__epv *_base_epv;
+ POA_Map__epv *Map_epv;
+ } POA_Map__vepv;
+ typedef struct
+ {
+ void *_private;
+ POA_Map__vepv *vepv;
+ } POA_Map;
+ extern void POA_Map__init(PortableServer_Servant servant,
+ CORBA_Environment * ev);
+ extern void POA_Map__fini(PortableServer_Servant servant,
+ CORBA_Environment * ev);
+#endif /* _defined_POA_Map */
+
+/** skel prototypes **/
+ void _ORBIT_skel_small_Mappel_Test(POA_Mappel * _ORBIT_servant,
+ gpointer _ORBIT_retval,
+ gpointer * _ORBIT_args,
+ CORBA_Context ctx,
+ CORBA_Environment * ev,
+ void (*_impl_Test)
+ (PortableServer_Servant _servant,
+ CORBA_Environment * ev));
+ void _ORBIT_skel_small_Map_mapString(POA_Map * _ORBIT_servant,
+ gpointer _ORBIT_retval,
+ gpointer * _ORBIT_args,
+ CORBA_Context ctx,
+ CORBA_Environment * ev,
+ Map(*_impl_mapString)
+ (PortableServer_Servant _servant,
+ const CORBA_char * astring,
+ CORBA_double * anum,
+ CORBA_Environment * ev));
+ void _ORBIT_skel_small_Map_doNothing(POA_Map * _ORBIT_servant,
+ gpointer _ORBIT_retval,
+ gpointer * _ORBIT_args,
+ CORBA_Context ctx,
+ CORBA_Environment * ev,
+ void (*_impl_doNothing)
+ (PortableServer_Servant _servant,
+ CORBA_Environment * ev));
+ void _ORBIT_skel_small_Map_doOneWay(POA_Map * _ORBIT_servant,
+ gpointer _ORBIT_retval,
+ gpointer * _ORBIT_args,
+ CORBA_Context ctx,
+ CORBA_Environment * ev,
+ void (*_impl_doOneWay)
+ (PortableServer_Servant _servant,
+ const CORBA_char * ignore,
+ CORBA_Environment * ev));
+ void _ORBIT_skel_small_Map_PlaceFlag(POA_Map * _ORBIT_servant,
+ gpointer _ORBIT_retval,
+ gpointer * _ORBIT_args,
+ CORBA_Context ctx,
+ CORBA_Environment * ev,
+ void (*_impl_PlaceFlag)
+ (PortableServer_Servant _servant,
+ CORBA_Environment * ev));
+ void _ORBIT_skel_small_Map_PointFromCoord(POA_Map * _ORBIT_servant,
+ gpointer _ORBIT_retval,
+ gpointer * _ORBIT_args,
+ CORBA_Context ctx,
+ CORBA_Environment * ev,
+ PointObj(*_impl_PointFromCoord)
+ (PortableServer_Servant _servant,
+ const CORBA_char * coord,
+ CORBA_Environment * ev));
+ void _ORBIT_skel_small_Map_View(POA_Map * _ORBIT_servant,
+ gpointer _ORBIT_retval,
+ gpointer * _ORBIT_args, CORBA_Context ctx,
+ CORBA_Environment * ev,
+ void (*_impl_View) (PortableServer_Servant
+ _servant,
+ const PointObj * where,
+ CORBA_Environment *
+ ev));
+ void _ORBIT_skel_small_Map_ViewAll(POA_Map * _ORBIT_servant,
+ gpointer _ORBIT_retval,
+ gpointer * _ORBIT_args,
+ CORBA_Context ctx,
+ CORBA_Environment * ev,
+ void (*_impl_ViewAll)
+ (PortableServer_Servant _servant,
+ const PointObjSequence * where,
+ CORBA_Environment * ev));
+ void _ORBIT_skel_small_Map_Route(POA_Map * _ORBIT_servant,
+ gpointer _ORBIT_retval,
+ gpointer * _ORBIT_args, CORBA_Context ctx,
+ CORBA_Environment * ev,
+ void (*_impl_Route)
+ (PortableServer_Servant _servant,
+ const PointObj * src,
+ const PointObj * dst,
+ CORBA_Environment * ev));
+ void _ORBIT_skel_small_Map_Get(POA_Map * _ORBIT_servant,
+ gpointer _ORBIT_retval,
+ gpointer * _ORBIT_args, CORBA_Context ctx,
+ CORBA_Environment * ev,
+ Mappel(*_impl_Get) (PortableServer_Servant
+ _servant,
+ CORBA_Environment *
+ ev));
+
+/** stub prototypes **/
+ void Mappel_Test(Mappel _obj, CORBA_Environment * ev);
+ Map Map_mapString(Map _obj, const CORBA_char * astring,
+ CORBA_double * anum, CORBA_Environment * ev);
+ void Map_doNothing(Map _obj, CORBA_Environment * ev);
+ void Map_doOneWay(Map _obj, const CORBA_char * ignore,
+ CORBA_Environment * ev);
+ void Map_PlaceFlag(Map _obj, CORBA_Environment * ev);
+ PointObj Map_PointFromCoord(Map _obj, const CORBA_char * coord,
+ CORBA_Environment * ev);
+ void Map_View(Map _obj, const PointObj * where, CORBA_Environment * ev);
+ void Map_ViewAll(Map _obj, const PointObjSequence * where,
+ CORBA_Environment * ev);
+ void Map_Route(Map _obj, const PointObj * src, const PointObj * dst,
+ CORBA_Environment * ev);
+ Mappel Map_Get(Map _obj, CORBA_Environment * ev);
+#include <orbit/orb-core/orbit-interface.h>
+
+#ifdef ORBIT_IDL_C_IMODULE_map
+ static
+#else
+ extern
+#endif
+ ORBit_IInterface Mappel__iinterface;
+#define Mappel_IMETHODS_LEN 1
+#ifdef ORBIT_IDL_C_IMODULE_map
+ static
+#else
+ extern
+#endif
+ ORBit_IMethod Mappel__imethods[Mappel_IMETHODS_LEN];
+#ifdef ORBIT_IDL_C_IMODULE_map
+ static
+#else
+ extern
+#endif
+ ORBit_IInterface Map__iinterface;
+#define Map_IMETHODS_LEN 9
+#ifdef ORBIT_IDL_C_IMODULE_map
+ static
+#else
+ extern
+#endif
+ ORBit_IMethod Map__imethods[Map_IMETHODS_LEN];
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#ifndef EXCLUDE_ORBIT_H
+#include <orbit/orbit.h>
+
+#endif /* EXCLUDE_ORBIT_H */
+#endif
+#undef ORBIT_IDL_SERIAL
diff --git a/map.idl b/map.idl
new file mode 100644
index 00000000..a68c7d54
--- /dev/null
+++ b/map.idl
@@ -0,0 +1,25 @@
+struct PointObj {
+ float lng; /* degrees */
+ float lat; /* degrees */
+ float height; /* meters */
+};
+
+typedef sequence<PointObj> PointObjSequence;
+
+interface Mappel {
+ void Test();
+};
+
+interface Map {
+ Map mapString (in string astring,
+ out double anum);
+ void doNothing ();
+ oneway void doOneWay (in string ignore);
+ void PlaceFlag();
+ PointObj PointFromCoord(in string coord);
+ void View(in PointObj where);
+ void ViewAll(in PointObjSequence where);
+ void Route(in PointObj src, in PointObj dst);
+ Mappel Get();
+};
+
diff --git a/map.ior b/map.ior
new file mode 100644
index 00000000..cb892efd
--- /dev/null
+++ b/map.ior
@@ -0,0 +1 @@
+IOR:010f00000c00000049444c3a4d61703a312e3000030000000054424f540000000101020005000000554e495800736f630900000070636d617274696e00005f6d2c0000002f746d702f6f726269742d6d617274696e2f6c696e632d353830642d302d363264393631633861336164360000000000caaedfba58000000010102312c0000002f746d702f6f726269742d6d617274696e2f6c696e632d353830642d302d3632643936316338613361643600000000001c00000000000000ad20380865f02828dd29282828282828010000007c08e43c0100000048000000016c654202000000050000001c00000000000000ad20380865f02828dd29282828282828010000007c08e43c0100000014000000010f000001000105000000000901010000000000
diff --git a/map_data.c b/map_data.c
new file mode 100644
index 00000000..cc384f03
--- /dev/null
+++ b/map_data.c
@@ -0,0 +1,112 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <glib.h>
+#include "file.h"
+#include "block.h"
+#include "map_data.h"
+#include "log.h"
+
+static struct map_data *load_map(char *dirname)
+{
+ int i,len=strlen(dirname);
+ char *filename[file_end];
+ char file[len+16];
+ struct map_data *data=g_new0(struct map_data,1);
+
+ memset(filename, 0, sizeof(*filename));
+
+ filename[file_border_ply]="border.ply";
+ filename[file_bridge_ply]="bridge.ply";
+ filename[file_height_ply]="height.ply";
+ filename[file_other_ply]="other.ply";
+ filename[file_rail_ply]="rail.ply";
+ filename[file_sea_ply]="sea.ply";
+ filename[file_street_bti]="street.bti";
+ filename[file_street_str]="street.str";
+ filename[file_strname_stn]="strname.stn";
+ filename[file_town_twn]="town.twn";
+ filename[file_tunnel_ply]="tunnel.ply";
+ filename[file_water_ply]="water.ply";
+ filename[file_woodland_ply]="woodland.ply";
+
+ strcpy(file, dirname);
+ file[len]='/';
+ for (i = 0 ; i < file_end ; i++) {
+ if (filename[i]) {
+ strcpy(file+len+1, filename[i]);
+ data->file[i]=file_create_caseinsensitive(file);
+ if (! data->file[i]) {
+ g_warning("Failed to load %s", file);
+ }
+ }
+ }
+ return data;
+}
+
+struct map_data *load_maps(char *map)
+{
+ char *name;
+ void *hnd;
+ struct map_data *last,*ret;
+ int i;
+
+ if (! map)
+ map=getenv("MAP_DATA");
+ if (! map)
+ map="/opt/reiseplaner/travel/DE.map";
+
+ ret=load_map(map);
+ last=ret;
+ hnd=file_opendir(map);
+ if (hnd) {
+ while ((name=file_readdir(hnd))) {
+ if (!strcasecmp(name+strlen(name)-4,".smp")) {
+ char next_name[strlen(map)+strlen(name)+2];
+ strcpy(next_name, map);
+ strcat(next_name, "/");
+ strcat(next_name, name);
+ last->next=load_map(next_name);
+ last=last->next;
+ }
+ }
+ file_closedir(hnd);
+ } else {
+ g_warning("Unable to open Map Directory '%s'\n", map);
+ }
+ log_apply(ret, file_end);
+
+#if 0
+ last=ret;
+ while (last) {
+ for (i = 0 ; i < file_end ; i++) {
+ if (last->file[i]) {
+ file_set_readonly(last->file[i]);
+ }
+ }
+ last=last->next;
+ }
+ *((int *)0)=0;
+#endif
+
+ return ret;
+}
+
+
+void
+map_data_foreach(struct map_data *mdata, int file, struct transformation *t, int limit,
+ void(*func)(struct block_info *, unsigned char *, unsigned char *, void *), void *data)
+{
+ struct block_info blk_inf;
+
+ memset(&blk_inf, 0, sizeof(blk_inf));
+
+ while (mdata) {
+ if (mdata->file[file]) {
+ blk_inf.mdata=mdata;
+ blk_inf.file=mdata->file[file];
+ block_foreach_visible(&blk_inf, t, limit, data, func);
+ }
+ mdata=mdata->next;
+ }
+}
diff --git a/map_data.h b/map_data.h
new file mode 100644
index 00000000..a38bd085
--- /dev/null
+++ b/map_data.h
@@ -0,0 +1,30 @@
+
+enum file_index {
+ file_border_ply=0,
+ file_bridge_ply,
+ file_height_ply,
+ file_other_ply,
+ file_rail_ply,
+ file_sea_ply,
+ file_street_bti,
+ file_street_str,
+ file_strname_stn,
+ file_town_twn,
+ file_tunnel_ply,
+ file_water_ply,
+ file_woodland_ply,
+ file_end
+};
+
+struct map_data {
+ struct file *file[file_end];
+ struct map_data *next;
+};
+
+struct map_data *load_maps(char *map);
+
+struct transformation;
+struct block_info;
+
+void map_data_foreach(struct map_data *mdata, int file, struct transformation *t, int limit,
+ void(*func)(struct block_info *, unsigned char *, unsigned char *, void *), void *data);
diff --git a/mapclient.c b/mapclient.c
new file mode 100644
index 00000000..056510fd
--- /dev/null
+++ b/mapclient.c
@@ -0,0 +1,103 @@
+/*
+ * CORBA map test
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2, or (at your option) any
+ * later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Author: Elliot Lee <sopwith@redhat.com>
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "map.h"
+
+
+#define ABORT_IF_EXCEPTION(_ev, _message) \
+if ((_ev)->_major != CORBA_NO_EXCEPTION) { \
+ g_error("%s: %s", _message, CORBA_exception_id (_ev)); \
+ CORBA_exception_free (_ev); \
+ abort(); \
+}
+
+Map map_client, bec;
+Mappel mappel;
+
+gboolean map_opt_quiet = FALSE;
+
+int main(int argc, char *argv[])
+{
+ CORBA_Environment ev;
+ CORBA_ORB orb;
+ char buf[1024];
+ FILE *ior;
+ PointObj pnt,src,dst;
+
+ ior=fopen("map.ior","r");
+ if (ior) {
+ fread(buf,1024,1,ior);
+ fclose(ior);
+ }
+ CORBA_exception_init(&ev);
+ orb = CORBA_ORB_init(&argc, argv, "orbit-local-orb", &ev);
+
+
+ /* bind to object */
+ map_client = CORBA_ORB_string_to_object(orb, buf, &ev);
+ ABORT_IF_EXCEPTION(&ev, "cannot bind to object");
+ g_assert(map_client != NULL);
+
+#if 0
+ /* Method call without any argument, usefull to tell
+ * lifeness */
+ Map_doNothing(map_client, &ev);
+ ABORT_IF_EXCEPTION(&ev, "service raised exception ");
+
+ Map_PlaceFlag(map_client, &ev);
+ ABORT_IF_EXCEPTION(&ev, "service raised exception ");
+#endif
+
+ if (argc > 0) {
+ if (!strcmp(argv[1],"--view")) {
+ pnt=Map_PointFromCoord(map_client, argv[2], &ev);
+ ABORT_IF_EXCEPTION(&ev, "service raised exception ");
+ Map_View(map_client, &pnt, &ev);
+ ABORT_IF_EXCEPTION(&ev, "service raised exception ");
+ }
+ if (!strcmp(argv[1],"--route")) {
+ src=Map_PointFromCoord(map_client, argv[2], &ev);
+ ABORT_IF_EXCEPTION(&ev, "service raised exception ");
+ dst=Map_PointFromCoord(map_client, argv[3], &ev);
+ ABORT_IF_EXCEPTION(&ev, "service raised exception ");
+ Map_Route(map_client, &src, &dst, &ev);
+ ABORT_IF_EXCEPTION(&ev, "service raised exception ");
+ }
+ mappel=Map_Get(map_client, &ev);
+ ABORT_IF_EXCEPTION(&ev, "service raised exception ");
+ }
+
+ /* release initial object reference */
+ CORBA_Object_release(map_client, &ev);
+ ABORT_IF_EXCEPTION(&ev, "service raised exception ");
+
+ /* shutdown ORB, shutdown IO channels */
+ CORBA_ORB_shutdown(orb, FALSE, &ev);
+ ABORT_IF_EXCEPTION(&ev, "ORB shutdown ...");
+
+ /* destroy local ORB */
+ CORBA_ORB_destroy(orb, &ev);
+ ABORT_IF_EXCEPTION(&ev, "destroying local ORB raised exception");
+
+ return 0;
+}
diff --git a/menu.c b/menu.c
new file mode 100644
index 00000000..e694f82a
--- /dev/null
+++ b/menu.c
@@ -0,0 +1,35 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <math.h>
+#include <time.h>
+#include "coord.h"
+#include "data_window.h"
+#include "route.h"
+#include "cursor.h"
+#include "menu.h"
+#include "command.h"
+#include "transform.h"
+#include "street.h"
+#include "statusbar.h"
+#include "destination.h"
+#include "main.h"
+#include "container.h"
+
+void
+menu_route_do_update(struct container *co)
+{
+ if (co->cursor) {
+ route_set_position(co->route, cursor_pos_get(co->cursor));
+ graphics_redraw(co);
+ if (co->statusbar && co->statusbar->statusbar_route_update)
+ co->statusbar->statusbar_route_update(co->statusbar, co->route);
+ }
+}
+
+void
+menu_route_update(struct container *co)
+{
+ menu_route_do_update(co);
+ graphics_redraw(co);
+}
diff --git a/menu.h b/menu.h
new file mode 100644
index 00000000..51b24729
--- /dev/null
+++ b/menu.h
@@ -0,0 +1,8 @@
+struct menu {
+ struct menu_gui *gui;
+};
+
+struct container;
+
+void menu_route_do_update(struct container *co);
+void menu_route_update(struct container *co);
diff --git a/navigation.c b/navigation.c
new file mode 100644
index 00000000..feb9e385
--- /dev/null
+++ b/navigation.c
@@ -0,0 +1,249 @@
+#include <math.h>
+#include <stdlib.h>
+#include "coord.h"
+#include "param.h"
+#include "block.h"
+#include "route.h"
+#include "street.h"
+#include "street_name.h"
+#include "speech.h"
+#include "navigation.h"
+#include "data_window.h"
+
+struct data_window *navigation_window;
+
+static int
+road_angle(struct coord *c, int dir)
+{
+ double angle;
+ int dx=c[1].x-c[0].x;
+ int dy=c[1].y-c[0].y;
+ angle=atan2(dx,dy);
+ angle*=180/M_PI;
+ if (dir == -1)
+ angle=angle-180;
+ if (angle < 0)
+ angle+=360;
+ return angle;
+}
+
+static void
+expand_str(char *str)
+{
+ int len=strlen(str);
+ if (len > 4 && !strcmp(str+len-4,"str."))
+ strcpy(str+len-4,"strasse");
+ if (len > 4 && !strcmp(str+len-4,"Str."))
+ strcpy(str+len-4,"Strasse");
+}
+
+struct navigation_item {
+ char name1[128];
+ char name2[128];
+ int length;
+ int time;
+ int crossings_start;
+ int crossings_end;
+ int angle_start;
+ int angle_end;
+ int points;
+ struct coord start;
+ struct coord end;
+};
+
+void
+navigation_goto(struct data_window *navigation_window, char **cols)
+{
+ extern struct container *co;
+ unsigned long scale;
+ long x,y;
+
+ printf("goto %s\n",cols[8]);
+ sscanf(cols[8],"%lx,%lx",&x,&y);
+ graphics_set_view(co, &x, &y, NULL);
+}
+
+int
+is_same_street(struct navigation_item *old, struct navigation_item *new)
+{
+ if (strlen(old->name2) && !strcmp(old->name2, new->name2)) {
+ strcpy(old->name1, new->name1);
+ return 1;
+ }
+ if (strlen(old->name1) && !strcmp(old->name1, new->name1)) {
+ strcpy(old->name2, new->name2);
+ return 1;
+ }
+ return 0;
+}
+
+int
+maneuver_required(struct navigation_item *old, struct navigation_item *new, int *delta)
+{
+ if (is_same_street(old, new))
+ return 0;
+ if (old->crossings_end == 2)
+ return 0;
+ *delta=new->angle_start-old->angle_end;
+ if (*delta < -180)
+ *delta+=360;
+ if (*delta > 180)
+ *delta-=360;
+ if (*delta < 20 && *delta >-20)
+ return 0;
+ return 1;
+}
+
+int flag;
+extern void *speech_handle;
+
+void
+make_maneuver(struct navigation_item *old, struct navigation_item *new)
+{
+
+ int delta;
+ struct param_list param_list[20];
+
+ char angle_old[30],angle_new[30],angle_delta[30],cross_roads[30],position[30];
+ char command[256],*p,*dir;
+
+ param_list[0].name="Name1 Old";
+ param_list[0].value=old->name1;
+ param_list[1].name="Name2 Old";
+ param_list[1].value=old->name2;
+ param_list[2].name="Name1 New";
+ param_list[2].value=new->name1;
+ param_list[3].name="Name2 New";
+ param_list[3].value=new->name2;
+ param_list[4].name="Angle Old";
+ param_list[5].name="Angle New";
+ param_list[6].name="Delta";
+ param_list[7].name="Cross-Roads";
+ param_list[8].name="Position";
+ param_list[9].name="Command";
+ if (old->points) {
+ if (!maneuver_required(old, new, &delta)) {
+ old->length+=new->length;
+ old->time+=new->time;
+ old->crossings_end=new->crossings_end;
+ old->angle_end=new->angle_end;
+ old->points+=new->points;
+ } else {
+ sprintf(angle_old,"%d", old->angle_end);
+ param_list[4].value=angle_old;
+ sprintf(angle_new,"%d", new->angle_start);
+ param_list[5].value=angle_new;
+ sprintf(angle_delta,"%d", delta);
+ param_list[6].value=angle_delta;
+ sprintf(cross_roads,"%d", old->crossings_end);
+ param_list[7].value=cross_roads;
+ sprintf(position,"0x%lx,0x%lx", new->start.x, new->start.y);
+ param_list[8].value=position;
+ sprintf(command,"Dem Strassenverlauf %d Meter folgen, dann ", old->length);
+ p=command+strlen(command);
+ dir="rechts";
+ if (delta < 0) {
+ dir="links";
+ delta=-delta;
+ }
+ if (delta < 45) {
+ strcpy(p,"leicht ");
+ } else if (delta < 105) {
+ } else if (delta < 165) {
+ strcpy(p,"scharf ");
+ }
+ p+=strlen(p);
+ strcpy(p,dir);
+ p+=strlen(p);
+ strcpy(p," abbiegen");
+ param_list[9].value=command;
+ if (flag) {
+ printf("command='%s'\n", command);
+#if 0
+ speech_say(speech_handle, command);
+#endif
+ flag=0;
+ }
+ data_window_add(navigation_window, param_list, 10);
+ *old=*new;
+ }
+ } else {
+ *old=*new;
+ }
+}
+
+void
+navigation_path_description(void *route)
+{
+ int id;
+ struct route_path_segment *curr=route_path_get_all(route);
+ struct block_info blk_inf;
+ struct street_str *str;
+ struct street_name name;
+ struct street_coord *coord;
+ struct map_data *mdata=route_mapdata_get(route);
+ struct coord *start,*end,*tmp;
+ int angle_start, angle_end, angle_tmp;
+ struct route_crossings *crossings_start,*crossings_end;
+ struct navigation_item item_curr,item_last;
+
+ memset(&item_last,0,sizeof(item_last));
+
+ if (!navigation_window)
+ navigation_window=data_window("Navigation",NULL,navigation_goto);
+ data_window_begin(navigation_window);
+ flag=1;
+ while (curr) {
+ str=NULL;
+ id=curr->segid;
+ if (id) {
+ if (id < 0)
+ id=-id;
+ street_get_by_id(mdata, id, &blk_inf, &str);
+ coord=street_coord_get(&blk_inf, str);
+ start=coord->c;
+ end=coord->c+coord->count-1;
+ angle_start=road_angle(coord->c, curr->dir);
+ if (coord->count > 2)
+ angle_end=road_angle(coord->c+coord->count-2,curr->dir);
+ else
+ angle_end=angle_start;
+ if (curr->dir < 0) {
+ tmp=start;
+ angle_tmp=angle_start;
+ start=end;
+ angle_start=angle_end;
+ end=tmp;
+ angle_end=angle_tmp;
+ }
+ crossings_start=route_crossings_get(route, start);
+ crossings_end=route_crossings_get(route, end);
+ if (str && str->nameid) {
+ street_name_get_by_id(&name, blk_inf.mdata, str->nameid);
+ strcpy(item_curr.name1,name.name1);
+ strcpy(item_curr.name2,name.name2);
+ expand_str(item_curr.name1);
+ expand_str(item_curr.name2);
+ } else {
+ item_curr.name1[0]='\0';
+ item_curr.name2[0]='\0';
+ }
+ item_curr.length=curr->length;
+ item_curr.time=curr->time;
+ item_curr.crossings_start=crossings_start->count;
+ item_curr.crossings_end=crossings_end->count;
+ item_curr.angle_start=angle_start;
+ item_curr.angle_end=angle_end;
+ item_curr.points=coord->count;
+ item_curr.start=*start;
+ item_curr.end=*end;
+ make_maneuver(&item_last,&item_curr);
+ free(coord);
+ free(crossings_start);
+ free(crossings_end);
+ }
+ curr=curr->next;
+ }
+ data_window_end(navigation_window);
+}
+
diff --git a/navigation.h b/navigation.h
new file mode 100644
index 00000000..ae39528f
--- /dev/null
+++ b/navigation.h
@@ -0,0 +1 @@
+void navigation_path_description(void *route);
diff --git a/out b/out
new file mode 100644
index 00000000..96d0c79d
--- /dev/null
+++ b/out
@@ -0,0 +1 @@
+ 2 §
diff --git a/outt b/outt
new file mode 100644
index 00000000..087b9c99
--- /dev/null
+++ b/outt
Binary files differ
diff --git a/param.c b/param.c
new file mode 100644
index 00000000..0b3296e3
--- /dev/null
+++ b/param.c
@@ -0,0 +1,46 @@
+#include <stdio.h>
+#include <string.h>
+#include <malloc.h>
+#include "param.h"
+
+void
+param_add_string(char *name, char *value, struct param_list **param, int *count)
+{
+ if (*count > 0) {
+ (*param)->name=malloc(strlen(value)+strlen(name)+2);
+ (*param)->value=(*param)->name+strlen(name)+1;
+ strcpy((*param)->name, name);
+ strcpy((*param)->value, value);
+ (*count)--;
+ (*param)++;
+ }
+
+}
+
+void
+param_add_dec(char *name, unsigned long value, struct param_list **param, int *count)
+{
+ char buffer[1024];
+ sprintf(buffer, "%ld", value);
+ param_add_string(name, buffer, param, count);
+}
+
+
+void
+param_add_hex(char *name, unsigned long value, struct param_list **param, int *count)
+{
+ char buffer[1024];
+ sprintf(buffer, "0x%lx", value);
+ param_add_string(name, buffer, param, count);
+}
+
+void
+param_add_hex_sig(char *name, long value, struct param_list **param, int *count)
+{
+ char buffer[1024];
+ if (value < 0)
+ sprintf(buffer, "-0x%lx", -value);
+ else
+ sprintf(buffer, "0x%lx", value);
+ param_add_string(name, buffer, param, count);
+}
diff --git a/param.h b/param.h
new file mode 100644
index 00000000..496c0542
--- /dev/null
+++ b/param.h
@@ -0,0 +1,9 @@
+struct param_list {
+ char *name;
+ char *value;
+};
+
+void param_add_string(char *name, char *value, struct param_list **param, int *count);
+void param_add_dec(char *name, unsigned long value, struct param_list **param, int *count);
+void param_add_hex(char *name, unsigned long value, struct param_list **param, int *count);
+void param_add_hex_sig(char *name, long value, struct param_list **param, int *count);
diff --git a/phrase.c b/phrase.c
new file mode 100644
index 00000000..92f6e7c3
--- /dev/null
+++ b/phrase.c
@@ -0,0 +1,25 @@
+#include <time.h>
+#include "coord.h"
+#include "route.h"
+#include "speech.h"
+
+void
+phrase_route_calc(void *speech)
+{
+ if (! speech)
+ return;
+ speech_say(speech,"Die Route wird berechnet\n");
+}
+
+void
+phrase_route_calculated(void *speech, void *route)
+{
+ struct tm *eta;
+ if (! speech)
+ return;
+
+ eta=route_get_eta(route);
+
+ speech_sayf(speech,"Die Route wurde berechnet. Geschätzte Ankunftszeit %d Uhr %d Entfernung %4.0f Kilometer", eta->tm_hour,eta->tm_min,route_get_len(route)/1000);
+
+}
diff --git a/phrase.h b/phrase.h
new file mode 100644
index 00000000..9f357388
--- /dev/null
+++ b/phrase.h
@@ -0,0 +1,2 @@
+void phrase_route_calc(void *speech);
+void phrase_route_calculated(void *speech, void *route);
diff --git a/plugin.c b/plugin.c
new file mode 100644
index 00000000..d5c182b5
--- /dev/null
+++ b/plugin.c
@@ -0,0 +1,21 @@
+#include <stdio.h>
+#include <dlfcn.h>
+#include "plugin.h"
+#define PLUGIN_C
+#include "plugin.h"
+
+void
+plugin_load(void)
+{
+ char *plugin="plugins/poi_geodownload/plugin_poi_geodownload.so";
+ void *h=dlopen(plugin,RTLD_LAZY);
+ void (*init)(void);
+
+ if (! h)
+ printf("can't load '%s', Error '%s'\n", plugin, dlerror());
+ else {
+ init=dlsym(h,"plugin_init");
+ (*init)();
+ }
+
+}
diff --git a/plugin.h b/plugin.h
new file mode 100644
index 00000000..84e0845d
--- /dev/null
+++ b/plugin.h
@@ -0,0 +1,56 @@
+void plugin_load(void);
+int plugin_init(void);
+
+struct container;
+struct popup;
+struct popup_item;
+#undef PLUGIN_FUNC1
+#undef PLUGIN_FUNC3
+#undef PLUGIN_FUNC4
+#define PLUGIN_PROTO(name,args...) void name(args)
+
+#ifdef PLUGIN_C
+#define PLUGIN_REGISTER(name,args...) \
+void \
+plugin_register_##name(PLUGIN_PROTO((*func),args)) \
+{ \
+ plugin_##name##_func=func; \
+}
+
+#define PLUGIN_CALL(name,args...) \
+{ \
+ if (plugin_##name##_func) \
+ (*plugin_##name##_func)(args); \
+}
+
+#define PLUGIN_FUNC1(name,t1,p1) \
+PLUGIN_PROTO((*plugin_##name##_func),t1 p1); \
+void plugin_call_##name(t1 p1) PLUGIN_CALL(name,p1) \
+PLUGIN_REGISTER(name,t1 p1)
+
+#define PLUGIN_FUNC3(name,t1,p1,t2,p2,t3,p3) \
+PLUGIN_PROTO((*plugin_##name##_func),t1 p1,t2 p2,t3 p3); \
+void plugin_call_##name(t1 p1,t2 p2, t3 p3) PLUGIN_CALL(name,p1,p2,p3) \
+PLUGIN_REGISTER(name,t1 p1,t2 p2,t3 p3)
+
+#define PLUGIN_FUNC4(name,t1,p1,t2,p2,t3,p3,t4,p4) \
+PLUGIN_PROTO((*plugin_##name##_func),t1 p1,t2 p2,t3 p3,t4 p4); \
+void plugin_call_##name(t1 p1,t2 p2, t3 p3, t4 p4) PLUGIN_CALL(name,p1,p2,p3,p4) \
+PLUGIN_REGISTER(name,t1 p1,t2 p2,t3 p3,t4 p4)
+
+#else
+#define PLUGIN_FUNC1(name,t1,p1) \
+void plugin_register_##name(void(*func)(t1 p1)); \
+void plugin_call_##name(t1 p1);
+
+#define PLUGIN_FUNC3(name,t1,p1,t2,p2,t3,p3) \
+void plugin_register_##name(void(*func)(t1 p1,t2 p2,t3 p3)); \
+void plugin_call_##name(t1 p1,t2 p2,t3 p3);
+
+#define PLUGIN_FUNC4(name,t1,p1,t2,p2,t3,p3,t4,p4) \
+void plugin_register_##name(void(*func)(t1 p1,t2 p2,t3 p3,t4 p4)); \
+void plugin_call_##name(t1 p1,t2 p2,t3 p3,t4 p4);
+#endif
+
+PLUGIN_FUNC1(draw, struct container *, co)
+PLUGIN_FUNC3(popup, struct container *, map, struct popup *, p, struct popup_item **, list)
diff --git a/point.h b/point.h
new file mode 100644
index 00000000..6672f3d5
--- /dev/null
+++ b/point.h
@@ -0,0 +1,9 @@
+#ifndef POINT_H
+#define POINT_H
+
+struct point {
+ int x;
+ int y;
+};
+
+#endif
diff --git a/poly.c b/poly.c
new file mode 100644
index 00000000..954e7fb2
--- /dev/null
+++ b/poly.c
@@ -0,0 +1,109 @@
+#include <stdlib.h>
+#include <assert.h>
+#include "coord.h"
+#include "map_data.h"
+#include "file.h"
+#include "block.h"
+#include "poly.h"
+#include "display.h"
+#include "draw_info.h"
+#include "data_window.h"
+#include "container.h"
+
+extern struct data_window poly_window;
+
+int
+poly_get_hdr(unsigned char **p,struct poly_hdr *poly_hdr)
+{
+ poly_hdr->addr=*p;
+ poly_hdr->c=(struct coord *) (*p);
+ *p+=3*sizeof(struct coord);
+ poly_hdr->name=*p;
+ while (**p) {
+ (*p)++;
+ }
+ (*p)++;
+ poly_hdr->order=*(*p)++;
+ poly_hdr->type=*(*p)++;
+ poly_hdr->polys=*(unsigned long *)(*p); (*p)+=sizeof(unsigned long);
+ poly_hdr->count=(unsigned long *)(*p); (*p)+=poly_hdr->polys*sizeof(unsigned long);
+ poly_hdr->count_sum=*(unsigned long *)(*p); (*p)+=sizeof(unsigned long);
+ return 0;
+}
+
+void
+poly_draw_segment(struct container *co, struct segment *seg, int disp, unsigned char **p, int limit)
+{
+ struct poly_hdr poly_hdr;
+ struct coord *coord;
+ unsigned int j,k,o;
+ struct point pnt;
+ struct param_list param[100];
+ int max=20000;
+ struct point xpoints[max];
+
+ seg->data[0]=*p;
+ poly_get_hdr(p, &poly_hdr);
+ if (poly_hdr.order < limit && is_visible(co->trans, poly_hdr.c)) {
+ transform(co->trans,&poly_hdr.c[2],&pnt);
+ for (k = 0 ; k < poly_hdr.polys ; k++) {
+ assert(poly_hdr.count[k] < max);
+ for (j = 0 ; j < poly_hdr.count[k] ; j++) {
+ transform(co->trans, coord_get(p), &xpoints[j]);
+ }
+ if (poly_hdr.type < 0x80) {
+ o=0;
+ if (poly_hdr.type == 0x1e)
+ o=1;
+ else if (poly_hdr.type == 0x2d)
+ o=2;
+ else if (poly_hdr.type == 0x32)
+ o=3;
+ display_add(&co->disp[disp+o], 0, 0, poly_hdr.name, poly_hdr.count[k], xpoints, NULL, seg, sizeof(*seg));
+
+ } else {
+ display_add(&co->disp[disp], 1, 0, poly_hdr.name, poly_hdr.count[k], xpoints, NULL, seg, sizeof(*seg));
+ }
+ if (co->data_window[data_window_type_poly])
+ data_window_add(co->data_window[data_window_type_poly], param, poly_get_param(seg, param, 100));
+ }
+ } else
+ (*p)+=poly_hdr.count_sum*sizeof(*coord);
+}
+
+void
+poly_draw_block(struct block_info *blk_inf, unsigned char *p, unsigned char *end, void *data)
+{
+ struct draw_info *drw_inf=data;
+ struct segment seg;
+ int i;
+
+ seg.blk_inf=*blk_inf;
+
+ for (i = 0 ; i < blk_inf->block->count ; i++)
+ poly_draw_segment(drw_inf->co, &seg, drw_inf->display, &p, drw_inf->limit);
+}
+
+
+int
+poly_get_param(struct segment *seg, struct param_list *param, int count)
+{
+ int i=count;
+ unsigned char *p=seg->data[0];
+ struct poly_hdr poly_hdr;
+
+
+ param_add_hex("Addr", p-seg->blk_inf.file->begin, &param, &count);
+ poly_get_hdr(&p, &poly_hdr);
+ param_add_string("Name", poly_hdr.name, &param, &count);
+ param_add_hex("L", poly_hdr.c[0].x, &param, &count);
+ param_add_hex("T", poly_hdr.c[0].y, &param, &count);
+ param_add_hex("R", poly_hdr.c[1].x, &param, &count);
+ param_add_hex("B", poly_hdr.c[1].y, &param, &count);
+ param_add_hex("X", poly_hdr.c[2].x, &param, &count);
+ param_add_hex("Y", poly_hdr.c[2].y, &param, &count);
+ param_add_hex("Order", poly_hdr.order, &param, &count);
+ param_add_hex("Type", poly_hdr.type, &param, &count);
+ param_add_hex("Polys", poly_hdr.polys, &param, &count);
+ return i-count;
+}
diff --git a/poly.h b/poly.h
new file mode 100644
index 00000000..8d735f5b
--- /dev/null
+++ b/poly.h
@@ -0,0 +1,13 @@
+struct poly_hdr {
+ unsigned char *addr;
+ struct coord *c;
+ char *name;
+ unsigned char order;
+ unsigned char type;
+ unsigned long polys;
+ unsigned long *count;
+ unsigned long count_sum;
+};
+
+void poly_draw_block(struct block_info *blk_inf, unsigned char *p, unsigned char *end, void *data);
+int poly_get_param(struct segment *seg, struct param_list *param, int count);
diff --git a/popup.c b/popup.c
new file mode 100644
index 00000000..f0fc5883
--- /dev/null
+++ b/popup.c
@@ -0,0 +1,306 @@
+#include <malloc.h>
+#include <string.h>
+#include <stdio.h>
+#include <assert.h>
+#include <gtk/gtk.h>
+#include "coord.h"
+#include "param.h"
+#include "map_data.h"
+#include "block.h"
+#include "display.h"
+#include "town.h"
+#include "street.h"
+#include "poly.h"
+#include "log.h"
+#include "popup.h"
+#include "plugin.h"
+#include "vehicle.h"
+#include "route.h"
+#include "cursor.h"
+#include "statusbar.h"
+#include "container.h"
+
+void
+popup_item_destroy_text(struct popup_item *item)
+{
+ g_free(item->text);
+ g_free(item);
+}
+
+struct popup_item *
+popup_item_new_text(struct popup_item **last, char *text, int priority)
+{
+ struct popup_item *curr;
+ curr=g_new(struct popup_item,1);
+ memset(curr, 0, sizeof(*curr));
+ curr->text=g_strdup(text);
+ curr->priority=priority;
+ curr->destroy=popup_item_destroy_text;
+ if (last) {
+ curr->next=*last;
+ *last=curr;
+ }
+ return curr;
+}
+
+struct popup_item *
+popup_item_new_func(struct popup_item **last, char *text, int priority, void (*func)(struct popup_item *, void *), void *param)
+{
+ struct popup_item *curr=popup_item_new_text(last, text, priority);
+ curr->func=func;
+ curr->param=param;
+ return curr;
+}
+
+struct popup_item *
+param_to_menu_new(char *name,struct param_list *plist, int c, int iso)
+{
+ struct popup_item *last, *curr, *ret;
+ int i;
+
+ ret=popup_item_new_text(NULL,name,1);
+ last=NULL;
+ for (i = 0 ; i < c ; i++) {
+ char name_buffer[strlen(plist[i].name)+strlen(plist[i].value)+2];
+ char *text=name_buffer;
+
+ sprintf(name_buffer,"%s:%s", plist[i].name, plist[i].value);
+ if (iso) {
+ text=g_convert(name_buffer,-1,"utf-8","iso8859-1",NULL,NULL,NULL);
+ if (! text) {
+ printf("problem converting '%s'\n", name_buffer);
+ }
+ }
+ curr=popup_item_new_text(&last, text, i);
+ if (iso)
+ free(text);
+ }
+ ret->submenu=last;
+ return ret;
+}
+
+void
+popup_set_no_passing(struct popup_item *item, void *param)
+{
+ struct display_list *l=param;
+ struct segment *seg=(struct segment *)(l->data);
+ struct street_str *str=(struct street_str *)(seg->data[0]);
+ char log[256];
+ int segid=str->segid;
+ if (segid < 0)
+ segid=-segid;
+
+ sprintf(log,"Attributes Street 0x%x updated: limit=0x%x(0x%x)", segid, 0x33, str->limit);
+ str->limit=0x33;
+ log_write(log, seg->blk_inf.file, str, sizeof(*str));
+}
+
+void
+popup_set_destination(struct popup_item *item, void *param)
+{
+ struct popup_item *ref=param;
+ struct popup *popup=ref->param;
+ struct container *co=popup->co;
+ printf("Destination %s\n", ref->text);
+ route_set_position(co->route, cursor_pos_get(co->cursor));
+ route_set_destination(co->route, &popup->c);
+ graphics_redraw(popup->co);
+ if (co->statusbar && co->statusbar->statusbar_route_update)
+ co->statusbar->statusbar_route_update(co->statusbar, co->route);
+}
+
+extern void *vehicle;
+
+void
+popup_set_position(struct popup_item *item, void *param)
+{
+ struct popup_item *ref=param;
+ struct popup *popup=ref->param;
+ printf("Position %s\n", ref->text);
+ vehicle_set_position(popup->co->vehicle, &popup->c);
+}
+
+void
+popup_break_crossing(struct display_list *l)
+{
+ struct segment *seg=(struct segment *)(l->data);
+ struct street_str *str=(struct street_str *)(seg->data[0]);
+ char log[256];
+ int segid=str->segid;
+ if (segid < 0)
+ segid=-segid;
+
+ sprintf(log,"Coordinates Street 0x%x updated: limit=0x%x(0x%x)", segid, 0x33, str->limit);
+ str->limit=0x33;
+ log_write(log, seg->blk_inf.file, str, sizeof(*str));
+}
+
+void
+popup_call_func(GtkObject *obj, void *parm)
+{
+ struct popup_item *curr=parm;
+ curr->func(curr, curr->param);
+}
+
+GtkWidget *
+popup_menu(struct popup_item *list)
+{
+ int min_prio,curr_prio;
+ struct popup_item *curr;
+ GtkWidget *item,*menu,*submenu;
+
+ curr_prio=0;
+ menu=gtk_menu_new();
+ do {
+ min_prio=INT_MAX;
+ curr=list;
+ while (curr) {
+ if (curr->priority == curr_prio) {
+ item=gtk_menu_item_new_with_label(curr->text);
+ gtk_menu_append(GTK_MENU(menu), item);
+ if (curr->submenu) {
+ submenu=popup_menu(curr->submenu);
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu);
+ } else if (curr->func) {
+ gtk_signal_connect(GTK_OBJECT(item), "activate",
+ GTK_SIGNAL_FUNC (popup_call_func), curr);
+ }
+ }
+ if (curr->priority > curr_prio && curr->priority < min_prio)
+ min_prio=curr->priority;
+ curr=curr->next;
+ }
+ curr_prio=min_prio;
+ } while (min_prio != INT_MAX);
+ return menu;
+}
+
+void
+popup_display_list_default(struct display_list *d, struct popup_item **popup_list)
+{
+ struct segment *seg;
+ char *desc,*text,*item_text;
+ struct popup_item *curr_item,*submenu;
+ struct param_list plist[100];
+
+ desc=NULL;
+ if (d->type == 0) desc="Polygon";
+ if (d->type == 1) desc="Polyline";
+ if (d->type == 2) desc="Street";
+ if (d->type == 3) desc="Label";
+ if (d->type == 4) desc="Point";
+ seg=(struct segment *)(d->data);
+ if (seg) {
+ if (d->label && strlen(d->label)) {
+ item_text=malloc(strlen(desc)+strlen(d->label)+2);
+ strcpy(item_text, desc);
+ strcat(item_text," ");
+ strcat(item_text, d->label);
+ } else {
+ item_text=desc;
+ }
+ text=g_convert(item_text,-1,"utf-8","iso8859-1",NULL,NULL,NULL);
+ curr_item=popup_item_new_text(popup_list,text,1);
+ g_free(text);
+
+ curr_item->submenu=param_to_menu_new("File", plist, file_get_param(seg->blk_inf.file, plist, 100), 1);
+ submenu=curr_item->submenu;
+ submenu->next=param_to_menu_new("Block", plist, block_get_param(&seg->blk_inf, plist, 100), 1);
+ submenu=submenu->next;
+
+ if (d->type == 0 || d->type == 1) {
+ submenu->next=param_to_menu_new(desc, plist, poly_get_param(seg, plist, 100), 1);
+ }
+ if (d->type == 2) {
+ submenu->next=param_to_menu_new(desc, plist, street_get_param(seg, plist, 100, 1), 1);
+ popup_item_new_func(&submenu->next,"Set no passing", 1000, popup_set_no_passing, d);
+ }
+ if (d->type == 3) {
+ submenu->next=param_to_menu_new(desc, plist, town_get_param(seg, plist, 100), 1);
+ }
+ if (d->type == 4) {
+ submenu->next=param_to_menu_new(desc, plist, street_bti_get_param(seg, plist, 100), 1);
+ }
+ }
+}
+
+void
+popup_display_list(struct container *co, struct popup *popup, struct popup_item **popup_list)
+{
+ GtkWidget *menu, *item;
+ struct display_list *list[100],**p=list;
+
+ menu=gtk_menu_new();
+ item=gtk_menu_item_new_with_label("Selection");
+ gtk_menu_append (GTK_MENU(menu), item);
+ display_find(&popup->pnt, co->disp, display_end, 3, list, 100);
+ while (*p) {
+ if (! (*p)->info)
+ popup_display_list_default(*p, popup_list);
+ else
+ (*(*p)->info)(*p, popup_list);
+ p++;
+ }
+}
+
+void
+popup_destroy_items(struct popup_item *item)
+{
+ struct popup_item *next;
+ while (item) {
+ if (item->active && item->func)
+ item->func(item, item->param);
+ if (item->submenu)
+ popup_destroy_items(item->submenu);
+ next=item->next;
+ assert(item->destroy != NULL);
+ item->destroy(item);
+ item=next;
+ }
+}
+
+void
+popup_destroy(GtkObject *obj, void *parm)
+{
+ struct popup *popup=parm;
+
+ popup_destroy_items(popup->items);
+ g_free(popup);
+}
+
+void
+popup(struct container *co, int x, int y, int button)
+{
+ GtkWidget *menu;
+ struct popup *popup=g_new(struct popup,1);
+ struct popup_item *list=NULL;
+ struct popup_item *descr;
+ struct coord_geo g;
+ char buffer[256];
+
+ popup->co=co;
+ popup->pnt.x=x;
+ popup->pnt.y=y;
+ transform_reverse(co->trans, &popup->pnt, &popup->c);
+ popup_display_list(co, popup, &list);
+ plugin_call_popup(co, popup, &list);
+ transform_lng_lat(&popup->c, &g);
+ strcpy(buffer,"Map Point ");
+ transform_geo_text(&g, buffer+strlen(buffer));
+ descr=popup_item_new_text(&list,buffer, 0);
+ descr->param=popup;
+
+ popup_item_new_func(&list,"Set as Position", 1000, popup_set_position, descr);
+ popup_item_new_func(&list,"Set as Destination", 1001, popup_set_destination, descr);
+
+ popup->items=list;
+ menu=popup_menu(list);
+ gtk_widget_show_all(menu);
+ popup->gui_data=menu;
+
+
+ gtk_menu_popup (GTK_MENU(menu), NULL, NULL, NULL, NULL, button, gtk_get_current_event_time());
+ gtk_signal_connect(GTK_OBJECT(menu), "selection-done", GTK_SIGNAL_FUNC (popup_destroy), popup);
+}
+
+
diff --git a/popup.h b/popup.h
new file mode 100644
index 00000000..989d5155
--- /dev/null
+++ b/popup.h
@@ -0,0 +1,22 @@
+void popup(struct container *co, int x, int y, int button);
+struct popup_item *popup_item_new_text(struct popup_item **last, char *text, int priority);
+
+struct popup {
+ struct container *co;
+ struct point pnt;
+ struct coord c;
+ void *gui_data;
+ struct popup_item *items;
+ struct popup_item *active;
+};
+
+struct popup_item {
+ char *text;
+ int priority;
+ void (*func)(struct popup_item *, void *);
+ void *param;
+ struct popup_item *submenu;
+ struct popup_item *next;
+ void (*destroy)(struct popup_item *);
+ int active;
+};
diff --git a/profile.c b/profile.c
new file mode 100644
index 00000000..35a41447
--- /dev/null
+++ b/profile.c
@@ -0,0 +1,18 @@
+#include <stdlib.h>
+#include <sys/time.h>
+
+void
+profile_timer(char *where)
+{
+ static struct timeval last;
+ struct timeval curr;
+ int msec;
+
+ if (where) {
+ gettimeofday(&curr, NULL);
+ msec=(curr.tv_usec-last.tv_usec)/1000+
+ (curr.tv_sec-last.tv_sec)*1000;
+ printf("%s:%d msec\n", where, msec);
+ }
+ gettimeofday(&last, NULL);
+}
diff --git a/route.c b/route.c
new file mode 100644
index 00000000..75de703a
--- /dev/null
+++ b/route.c
@@ -0,0 +1,1053 @@
+#include <stdio.h>
+#include <math.h>
+#include <assert.h>
+#include <unistd.h>
+#include <sys/time.h>
+#include <glib.h>
+#include "coord.h"
+#include "param.h"
+#include "map_data.h"
+#include "block.h"
+#include "street.h"
+#include "street_data.h"
+#include "display.h"
+#include "transform.h"
+#include "route.h"
+#include "phrase.h"
+#include "navigation.h"
+#include "fib-1.0/fib.h"
+#include "time.h"
+
+/* Node1: 4 */
+/* Node2: 4 */
+/* Segid: 4 */
+/* len: 4 */
+/* type: 1 */
+/* limit/order: 1 */
+/* 18 Bytes */
+
+extern void *speech_handle;
+static int speed_list[16]={120,120,80,110,90,80,60,90,80,70,60,50,30,10,0,60};
+
+int debug_route=0;
+
+#define GC_TEXT_FG 7
+#define GC_TEXT_BG 8
+#define GC_BLACK 9
+#define GC_RED 21
+
+int hx=0x1416bc; /* 447C9E dx=3E18, dxmg=5E09*/
+int hy=0x5f224c; /* 5282B5 dy=5E07, dymg=8F1C*/
+int segid_h=0x20461961;
+
+int hkx=0x1474c5; /* 44BAB6 */
+int hky=0x5fb168; /* 52E0BC */
+
+int lx=0x141ac3;
+int ly=0x5f2d7a;
+
+int trace;
+/* 0x141b53, 0x5f2065 */
+
+struct coord3d {
+ struct coord xy;
+ int h;
+};
+
+
+struct route_point {
+ struct route_point *next;
+ struct route_point *hash_next;
+ struct route_segment *start;
+ struct route_segment *end;
+ struct route_segment *seg;
+#if 0
+ int conn;
+ int id;
+#endif
+ struct fibheap_el *el;
+ int value;
+ struct coord3d c;
+};
+
+
+struct route_segment {
+ struct route_segment *next;
+ struct route_segment *start_next;
+ struct route_segment *end_next;
+ struct route_point *start;
+ struct route_point *end;
+ struct street_str *str;
+ int limit;
+ int len;
+ int offset;
+};
+
+struct street_info {
+ struct street_header *hdr;
+ struct street_type *typ;
+ struct street_str *str;
+ unsigned char *p;
+ int bytes;
+ int include;
+};
+
+struct route_info {
+ int mode;
+ struct coord3d seg1,seg2,line1,line2,pos,click;
+ int seg1_len,seg2_len;
+ int offset;
+ int dist;
+ struct block_info blk_inf;
+ struct street_info str_inf;
+};
+
+struct route {
+ struct map_data *map_data;
+ double route_time_val;
+ double route_len_val;
+ struct route_path_segment *path;
+ struct route_path_segment *path_last;
+ struct route_info *pos;
+ struct route_info *dst;
+ struct route_segment *route_segments;
+ struct route_point *route_points;
+ struct block_list *blk_lst;
+#define HASH_SIZE 8192
+ struct route_point *hash[HASH_SIZE];
+};
+
+struct route *
+route_new(void)
+{
+ struct route *this=g_new0(struct route, 1);
+ return this;
+}
+
+void
+route_path_free(struct route *this)
+{
+ struct route_path_segment *curr, *next;
+ curr=this->path;
+
+ while (curr) {
+ next=curr->next;
+ g_free(curr);
+ curr=next;
+ }
+ this->path=NULL;
+ this->path_last=NULL;
+}
+
+void
+route_mapdata_set(struct route *this, struct map_data *mdata)
+{
+ this->map_data=mdata;
+}
+
+struct map_data *
+route_mapdata_get(struct route *this)
+{
+ return this->map_data;
+}
+
+static void
+route_add_path_segment(struct route *this, int segid, int offset, struct coord *start, struct coord *end, int dir, int len, int time)
+{
+ struct route_path_segment *segment=g_new0(struct route_path_segment,1);
+ segment->next=NULL;
+ segment->segid=segid;
+ segment->offset=offset;
+ segment->dir=dir;
+ segment->length=len;
+ segment->time=time;
+ if (start)
+ segment->c[0]=*start;
+ if (end)
+ segment->c[1]=*end;
+ if (!this->path)
+ this->path=segment;
+ if (this->path_last)
+ this->path_last->next=segment;
+ this->path_last=segment;
+}
+
+void
+route_set_position(struct route *this, struct coord *pos)
+{
+ struct route_info *rt;
+
+ route_path_free(this);
+ rt=route_find_nearest_street(this->map_data, pos);
+ route_find_point_on_street(rt);
+ if (this->pos)
+ g_free(this->pos);
+ this->pos=rt;
+ if (this->dst) {
+ route_find(this, this->pos, this->dst);
+ }
+}
+
+struct route_path_segment *
+route_path_get_all(struct route *this)
+{
+ return this->path;
+}
+
+struct route_path_segment *
+route_path_get(struct route *this, int segid)
+{
+ struct route_path_segment *curr=this->path;
+
+ while (curr) {
+ if (curr->segid == segid)
+ return curr;
+ curr=curr->next;
+ }
+ return NULL;
+
+}
+
+void
+route_set_destination(struct route *this, struct coord *dest)
+{
+ struct route_info *rt;
+
+ rt=route_find_nearest_street(this->map_data, dest);
+ route_find_point_on_street(rt);
+ if (this->dst)
+ g_free(this->dst);
+ this->dst=rt;
+ route_do_start(this, this->pos, this->dst);
+}
+
+struct coord *
+route_get_destination(struct route *this)
+{
+ if (! this->dst)
+ return NULL;
+ return &this->dst->click.xy;
+}
+
+void
+route_street_foreach(struct block_info *blk_inf, unsigned char *p, unsigned char *end, void *data,
+ void(*func)(struct block_info *, struct street_info *, unsigned char **, unsigned char *, void *))
+{
+ struct street_info str_inf;
+ struct street_str *str,*str_tmp;
+
+ if (blk_inf->block_number == 0x10c6) {
+ printf("route_street_foreach p=%p\n", p);
+ }
+ str_inf.hdr=(struct street_header *)p;
+ p+=sizeof(struct street_header);
+ assert(str_inf.hdr->count == blk_inf->block->count);
+
+ str_inf.bytes=street_get_bytes(blk_inf->block);
+
+ str_inf.typ=(struct street_type *)p;
+ p+=blk_inf->block->count*sizeof(struct street_type);
+
+ str=(struct street_str *)p;
+ str_tmp=str;
+ while (str_tmp->segid)
+ str_tmp++;
+
+ p=(unsigned char *)str_tmp;
+ p+=4;
+
+ while (str->segid) {
+ str_inf.include=(str[1].segid > 0);
+ str_inf.str=str;
+ str_inf.p=p;
+ func(blk_inf, &str_inf, &p, end-4, data);
+ if (str_inf.include)
+ str_inf.typ++;
+ str++;
+ }
+}
+
+
+static struct route_point *
+route_get_point(struct route *this, struct coord3d *c)
+{
+ struct route_point *p=this->route_points;
+ int hashval=(c->xy.x + c->xy.y + c->h) & (HASH_SIZE-1);
+ p=this->hash[hashval];
+ while (p) {
+ if (p->c.xy.x == c->xy.x && p->c.xy.y == c->xy.y && p->c.h == c->h)
+ return p;
+ p=p->hash_next;
+ }
+ return NULL;
+}
+
+
+struct route_point *
+route_point_add(struct route *this, struct coord3d *f, int conn)
+{
+ int hashval;
+ struct route_point *p;
+
+ p=route_get_point(this,f);
+ if (p) {
+#if 0
+ p->conn+=conn;
+#endif
+ } else {
+ hashval=(f->xy.x + f->xy.y + f->h) & (HASH_SIZE-1);
+ if (debug_route)
+ printf("p (0x%lx,0x%lx,0x%x)\n", f->xy.x, f->xy.y, f->h);
+ p=g_new(struct route_point,1);
+ p->hash_next=this->hash[hashval];
+ this->hash[hashval]=p;
+ p->next=this->route_points;
+#if 0
+ p->conn=conn;
+ p->id=++id;
+#endif
+ p->el=NULL;
+ p->start=NULL;
+ p->end=NULL;
+ p->seg=NULL;
+ p->value=INT_MAX;
+ p->c=*f;
+ this->route_points=p;
+ }
+ return p;
+}
+
+static void
+route_points_free(struct route *this)
+{
+ struct route_point *curr,*next;
+ curr=this->route_points;
+ while (curr) {
+ next=curr->next;
+ g_free(curr);
+ curr=next;
+ }
+ this->route_points=NULL;
+ memset(this->hash, 0, sizeof(this->hash));
+}
+
+void
+route_segment_add(struct route *this, struct route_point *start, struct route_point *end, int len, struct street_str *str, int offset, int limit)
+{
+ struct route_segment *s;
+ s=g_new(struct route_segment,1);
+ s->start=start;
+ s->start_next=start->start;
+ start->start=s;
+ s->end=end;
+ s->end_next=end->end;
+ end->end=s;
+ s->len=len;
+ s->str=str;
+ s->offset=offset;
+ s->limit=limit;
+ s->next=this->route_segments;
+ this->route_segments=s;
+ if (debug_route)
+ printf("l (0x%lx,0x%lx0x%x)-(0x%lx,0x%lx,0x%x)\n", start->c.xy.x, start->c.xy.y, start->c.h, end->c.xy.x, end->c.xy.y, end->c.h);
+
+}
+
+void
+route_segments_free(struct route *this)
+{
+ struct route_segment *curr,*next;
+ curr=this->route_segments;
+ while (curr) {
+ next=curr->next;
+ g_free(curr);
+ curr=next;
+ }
+ this->route_segments=NULL;
+}
+
+void
+route_display_points(struct route *this, struct container *co)
+{
+#if 0
+ GtkMap *map=co->map;
+ struct route_point *p=this->route_points;
+ int r=5;
+ struct point pnt;
+ char text[256];
+
+ while (p) {
+ if (transform(co->trans, &p->c.xy, &pnt)) {
+ gdk_draw_arc(GTK_WIDGET(map)->window, map->gc[GC_BLACK], FALSE, pnt.x-r/2, pnt.y-r/2, r, r, 0, 64*360);
+ if (p->value != -1) {
+ sprintf(text,"%d", p->value);
+#if 0
+ display_text(GTK_WIDGET(map)->window, map->gc[GC_TEXT_FG], map->gc[GC_TEXT_BG], map->face[0], text, pnt.x+6, pnt.y+4, 0x10000, 0);
+#endif
+ }
+ }
+ p=p->next;
+ }
+#endif
+}
+
+int
+route_time(int type, int len)
+{
+ return len*36/speed_list[type & 0x3f];
+}
+
+int
+route_value(int type, int len)
+{
+ return route_time(type, len);
+}
+
+int
+route_get_height(int segid, struct coord *c)
+{
+ if (c->x == 0x141b53 && c->y == 0x5f2065 && (segid == 0x4fad2fa || segid == 0x4fad155))
+ return 1;
+ if (c->x == 0x1477a7 && c->y == 0x5fac38 && (segid == 0x32adac2 || segid == 0x40725c6))
+ return 1;
+ if (c->x == 0x147a4c && c->y == 0x5fb194 && (segid == 0x32adb17 || segid == 0x32adb16))
+ return 1;
+ return 0;
+}
+
+void
+route_process_street_graph(struct block_info *blk_inf, struct street_info *str_inf, unsigned char **p, unsigned char *end, void *data)
+{
+ struct route *this=data;
+ int limit,flags=0;
+ double len=0;
+ struct coord3d f,o,l;
+ struct route_point *s_pnt,*e_pnt;
+
+ street_get_coord(p, str_inf->bytes, blk_inf->block->c, &f.xy);
+ f.h=route_get_height(str_inf->str->segid, &f.xy);
+ s_pnt=route_point_add(this,&f, 1);
+
+ l=f;
+ o=f;
+ while (*p < end) {
+ flags=street_get_coord(p, str_inf->bytes, blk_inf->block->c, &f.xy);
+ if (flags && !str_inf->include)
+ break;
+ len+=transform_distance(&l.xy, &o.xy);
+ l=o;
+ o=f;
+ if (flags)
+ break;
+ }
+ len+=transform_distance(&l.xy, &o.xy);
+ o.h=route_get_height(str_inf->str->segid, &o.xy);
+ e_pnt=route_point_add(this,&o, 1);
+
+ limit=str_inf->str->limit;
+ if (str_inf->str->limit == 0x30 && (str_inf->str->type & 0x40))
+ limit=0x03;
+ if (str_inf->str->limit == 0x03 && (str_inf->str->type & 0x40))
+ limit=0x30;
+
+ if (str_inf->str->limit != 0x33)
+ route_segment_add(this, s_pnt, e_pnt, len, str_inf->str, 0, limit);
+ debug_route=0;
+ *p-=2*str_inf->bytes;
+}
+
+static int
+compare(void *v1, void *v2)
+{
+ struct route_point *p1=v1;
+ struct route_point *p2=v2;
+ return p1->value-p2->value;
+}
+
+static void
+route_flood(struct route *this, struct route_info *rt_end)
+{
+ struct route_point *end;
+ struct route_point *p_min;
+ struct route_segment *s;
+ int min,new,old,val;
+ struct fibheap *heap;
+
+ heap = fh_makeheap();
+
+ fh_setcmp(heap, compare);
+
+ end=route_get_point(this, &rt_end->pos);
+ assert(end != 0);
+ end->value=0;
+ end->el=fh_insert(heap, end);
+ for (;;) {
+ p_min=fh_extractmin(heap);
+ if (! p_min)
+ break;
+ min=p_min->value;
+ if (debug_route)
+ printf("min=%d, 0x%lx, 0x%lx\n", min, p_min->c.xy.x, p_min->c.xy.y);
+ s=p_min->start;
+ while (s) {
+ val=route_value(s->str->type, s->len);
+#if 0
+ val+=val*2*street_route_contained(s->str->segid);
+#endif
+ new=min+val;
+ if (debug_route)
+ printf("begin %d (0x%lx,0x%lx) ",new,s->end->c.xy.x, s->end->c.xy.y);
+ if (new < s->end->value && !(s->limit & 0x30)) {
+ s->end->value=new;
+ s->end->seg=s;
+ if (! s->end->el) {
+ if (debug_route)
+ printf("insert");
+ s->end->el=fh_insert(heap, s->end);
+ }
+ else {
+ if (debug_route)
+ printf("replace");
+ fh_replacedata(heap, s->end->el, s->end);
+ }
+ }
+ if (debug_route)
+ printf("\n");
+ s=s->start_next;
+ }
+ s=p_min->end;
+ while (s) {
+ new=min+route_value(s->str->type, s->len);
+ if (debug_route)
+ printf("end %d vs %d (0x%lx,0x%lx) ",new,s->start->value,s->start->c.xy.x, s->start->c.xy.y);
+ if (new < s->start->value && !(s->limit & 0x03)) {
+ old=s->start->value;
+ s->start->value=new;
+ s->start->seg=s;
+ if (! s->start->el) {
+ if (debug_route)
+ printf("insert");
+ s->start->el=fh_insert(heap, s->start);
+ }
+ else {
+ if (debug_route)
+ printf("replace");
+ fh_replacedata(heap, s->start->el, s->start);
+ }
+ }
+ if (debug_route)
+ printf("\n");
+ s=s->end_next;
+ }
+ }
+}
+
+int
+route_find(struct route *this, struct route_info *rt_start, struct route_info *rt_end)
+{
+ struct route_point *start,*start1,*start2;
+ struct route_segment *s=NULL;
+ double len=0,slen;
+ int ret,hr,min,time=0,seg_time,dir,type;
+ unsigned int val1=0xffffffff,val2=0xffffffff;
+
+ start1=route_get_point(this, &rt_start->seg1);
+ start2=route_get_point(this, &rt_start->seg2);
+ assert(start1 != 0);
+ assert(start2 != 0);
+ if (start1->value != -1)
+ val1=start1->value+route_value(rt_start->str_inf.str->type, rt_start->seg1_len);
+ if (start2->value != -1)
+ val2=start2->value+route_value(rt_start->str_inf.str->type, rt_start->seg2_len);
+
+ route_add_path_segment(this, 0, 0, &rt_start->click.xy, &rt_start->pos.xy, 1, 0, 0);
+ type=rt_start->str_inf.str->type;
+ if (val1 < val2) {
+ ret=1;
+ start=start1;
+ slen=transform_distance(&rt_start->pos.xy, &rt_start->line1.xy);
+ route_add_path_segment(this, 0, 0, &rt_start->pos.xy, &rt_start->line1.xy, 1, slen, route_time(type, slen));
+ route_add_path_segment(this, rt_start->str_inf.str->segid, rt_start->offset, NULL, NULL, -1, rt_start->seg1_len, route_time(type, rt_start->seg1_len));
+ }
+ else {
+ ret=2;
+ start=start2;
+ slen=transform_distance(&rt_start->pos.xy, &rt_start->line2.xy);
+ route_add_path_segment(this, 0, 0, &rt_start->pos.xy, &rt_start->line2.xy, 1, slen, route_time(type, slen));
+ route_add_path_segment(this, rt_start->str_inf.str->segid, -rt_start->offset, NULL, NULL, 1, rt_start->seg2_len, route_time(type, rt_start->seg2_len));
+ }
+
+ while (start->value) {
+ s=start->seg;
+ if (! s) {
+ printf("No Route found\n");
+ break;
+ }
+ if (s->start == start) {
+ start=s->end;
+ dir=1;
+ }
+ else {
+ start=s->start;
+ dir=-1;
+ }
+ len+=s->len;
+ seg_time=route_time(s->str->type, s->len);
+ time+=seg_time;
+ route_add_path_segment(this, s->str->segid, s->offset, NULL, NULL, dir, s->len, seg_time);
+ }
+ if (s) {
+ if (s->start->c.xy.x == rt_end->seg1.xy.x && s->start->c.xy.y == rt_end->seg1.xy.y)
+ route_add_path_segment(this, 0, 0, &rt_end->pos.xy, &rt_end->line1.xy, -1, 0, 0);
+ else
+ route_add_path_segment(this, 0, 0, &rt_end->pos.xy, &rt_end->line2.xy, -1, 0, 0);
+ route_add_path_segment(this, 0, 0, &rt_end->click.xy, &rt_end->pos.xy, -1, 0, 0);
+ printf("len %5.3f\n", len/1000);
+ this->route_time_val=time/10;
+ time/=10;
+ this->route_len_val=len;
+ min=time/60;
+ time-=min*60;
+ hr=min/60;
+ min-=hr*60;
+ printf("time %02d:%02d:%02d\n", hr, min, time);
+#if 1
+ navigation_path_description(this);
+#endif
+ }
+ return ret;
+}
+
+struct block_list {
+ struct block_info blk_inf;
+ unsigned char *p;
+ unsigned char *end;
+ struct block_list *next;
+};
+
+void
+route_process_street_block_graph(struct block_info *blk_inf, unsigned char *p, unsigned char *end, void *data)
+{
+ struct route *this=data;
+ struct block_list *blk_lst=this->blk_lst;
+
+ while (blk_lst) {
+ if (blk_lst->blk_inf.block_number == blk_inf->block_number && blk_lst->blk_inf.file == blk_inf->file)
+ return;
+ blk_lst=blk_lst->next;
+ }
+ blk_lst=g_new(struct block_list,1);
+ blk_lst->blk_inf=*blk_inf;
+ blk_lst->p=p;
+ blk_lst->end=end;
+ blk_lst->next=this->blk_lst;
+ this->blk_lst=blk_lst;
+#if 0
+ route_street_foreach(blk_inf, p, end, data, route_process_street_graph);
+#endif
+}
+
+void
+route_blocklist_free(struct route *this)
+{
+ struct block_list *curr,*next;
+ curr=this->blk_lst;
+ while (curr) {
+ next=curr->next;
+ g_free(curr);
+ curr=next;
+ }
+}
+
+void
+route_build_graph(struct route *this, struct map_data *mdata, struct coord *c, int coord_count)
+{
+ struct coord rect[2];
+ struct transformation t;
+
+ int i,j,max_dist,max_coord_dist;
+ int ranges[7]={0,1024000,512000,256000,128000,64000,32000};
+ this->blk_lst=NULL;
+ struct block_list *blk_lst_curr;
+
+ rect[0]=c[0];
+ rect[1]=c[0];
+ for (i = 1 ; i < coord_count ; i++) {
+ if (c[i].x < rect[0].x)
+ rect[0].x=c[i].x;
+ if (c[i].x > rect[1].x)
+ rect[1].x=c[i].x;
+ if (c[i].y > rect[0].y)
+ rect[0].y=c[i].y;
+ if (c[i].y < rect[1].y)
+ rect[1].y=c[i].y;
+ }
+ max_coord_dist=rect[1].x-rect[0].x;
+ if (max_coord_dist < rect[0].y-rect[1].y)
+ max_coord_dist=rect[0].y-rect[1].y;
+ max_coord_dist+=10000+max_coord_dist/2;
+
+ printf("Collecting Blocks\n");
+ for (i = 0 ; i < coord_count ; i++) {
+ for (j = 0 ; j < 7 ; j++) {
+ printf("range %d,%d\n", i, j);
+ max_dist=ranges[j];
+ if (max_dist == 0 || max_dist > max_coord_dist)
+ max_dist=max_coord_dist;
+
+ transform_setup_source_rect_limit(&t,&c[i],max_dist);
+
+ map_data_foreach(mdata, file_street_str, &t, j+1, route_process_street_block_graph, this);
+ }
+ }
+ blk_lst_curr=this->blk_lst;
+ i=0;
+ while (blk_lst_curr) {
+ i++;
+ blk_lst_curr=blk_lst_curr->next;
+ }
+ printf("Block Count %d\n", i);
+ blk_lst_curr=this->blk_lst;
+
+ j=0;
+ while (blk_lst_curr) {
+ j++;
+ printf("%d/%d\n", j, i);
+ route_street_foreach(&blk_lst_curr->blk_inf, blk_lst_curr->p, blk_lst_curr->end, this, route_process_street_graph);
+ blk_lst_curr=blk_lst_curr->next;
+ }
+}
+
+void
+route_process_street3(struct block_info *blk_inf, struct street_info *str_inf, unsigned char **p, unsigned char *end, void *data)
+{
+ int flags=0;
+ int i,ldist;
+ struct coord3d first,f,o,l;
+ struct coord3d cret;
+ int match=0;
+ double len=0,len_p=0;
+ struct route_info *rt_inf=(struct route_info *)data;
+
+ street_get_coord(p, str_inf->bytes, blk_inf->block->c, &f.xy);
+ f.h=route_get_height(str_inf->str->segid, &f.xy);
+
+ l=f;
+ o=f;
+ first=f;
+ i=0;
+
+ while (*p < end) {
+ flags=street_get_coord(p, str_inf->bytes, blk_inf->block->c, &f.xy);
+ f.h=route_get_height(str_inf->str->segid, &f.xy);
+ if (flags && !str_inf->include)
+ break;
+
+ if (i++) {
+ ldist=transform_distance_line_sq(&l.xy, &o.xy, &rt_inf->click.xy, &cret.xy);
+ if (ldist < rt_inf->dist) {
+ rt_inf->dist=ldist;
+ rt_inf->seg1=first;
+ rt_inf->line1=l;
+ rt_inf->pos=cret;
+ rt_inf->blk_inf=*blk_inf;
+ rt_inf->str_inf=*str_inf;
+ rt_inf->line2=o;
+ rt_inf->offset=i-1;
+ len_p=len;
+ match=1;
+ }
+ if (rt_inf->mode == 1)
+ len+=transform_distance(&l.xy, &o.xy);
+ }
+ l=o;
+ o=f;
+ if (flags)
+ break;
+ }
+ ldist=transform_distance_line_sq(&l.xy, &o.xy, &rt_inf->click.xy, &cret.xy);
+ if (ldist < rt_inf->dist) {
+ rt_inf->dist=ldist;
+ rt_inf->seg1=first;
+ rt_inf->line1=l;
+ rt_inf->pos=cret;
+ rt_inf->blk_inf=*blk_inf;
+ rt_inf->str_inf=*str_inf;
+ rt_inf->line2=o;
+ rt_inf->offset=i;
+ len_p=len;
+ match=1;
+ }
+ if (match) {
+ rt_inf->seg2=o;
+ if (rt_inf->mode == 1) {
+ len+=transform_distance(&l.xy, &o.xy);
+ len_p+=transform_distance(&rt_inf->pos.xy, &rt_inf->line1.xy);
+ rt_inf->seg1_len=len_p;
+ rt_inf->seg2_len=len-len_p;
+ }
+ }
+ *p-=2*str_inf->bytes;
+}
+
+
+void
+route_process_street_block(struct block_info *blk_inf, unsigned char *p, unsigned char *end, void *data)
+{
+ route_street_foreach(blk_inf, p, end, data, route_process_street3);
+}
+
+struct street_str *
+route_info_get_street(struct route_info *rt)
+{
+ return rt->str_inf.str;
+}
+
+struct block_info *
+route_info_get_block(struct route_info *rt)
+{
+ return &rt->blk_inf;
+}
+
+struct route_info *
+route_find_nearest_street(struct map_data *mdata, struct coord *c)
+{
+ struct route_info *ret=g_new0(struct route_info,1);
+ struct transformation t;
+ int max_dist=1000;
+
+ transform_setup_source_rect_limit(&t,c,max_dist);
+
+ ret->click.xy=*c;
+ ret->dist=INT_MAX;
+ ret->mode=0;
+
+ map_data_foreach(mdata, file_street_str, &t, 48, route_process_street_block, ret);
+
+ return ret;
+}
+
+void
+route_find_point_on_street(struct route_info *rt_inf)
+{
+ unsigned char *p,*end;
+
+ rt_inf->dist=INT_MAX;
+ rt_inf->mode=1;
+
+ p=rt_inf->str_inf.p;
+ end=(unsigned char *)rt_inf->blk_inf.block;
+ end+=rt_inf->blk_inf.block->size;
+
+ route_process_street3(&rt_inf->blk_inf, &rt_inf->str_inf, &p, end, rt_inf);
+}
+
+
+struct route_info *start,*end;
+int count;
+
+/* XPM */
+static char * flag_xpm[] = {
+"16 16 3 1",
+" c None",
+"+ c #000000",
+"@ c #FFFF00",
+"+++ ",
+"+@@++ ",
+"+@@@@+++ ",
+"+@@@@@@@++ ",
+"+@@@@@@@@@++ ",
+"+@@@@@@@@@@@++ ",
+"+@@@@@@@@@++ ",
+"+@@@@@@@++ ",
+"+@@@@+++ ",
+"+@@++ ",
+"+++ ",
+"+ ",
+"+ ",
+"+ ",
+"+ ",
+"+ "};
+
+void
+route_click(struct route *this, struct container *co, int x, int y)
+{
+#if 0
+ GtkMap *map=co->map;
+ struct point pnt;
+ GdkBitmap *flag_mask;
+ GdkPixmap *flag;
+ struct coord c;
+ struct route_info *rt_inf;
+ GdkGC *gc;
+
+
+ pnt.x=x;
+ pnt.y=y;
+ transform_reverse(co->trans, &pnt, &c);
+ transform(co->trans, &c, &pnt);
+ rt_inf=route_find_nearest_street(co->map_data, &c);
+
+
+ route_find_point_on_street(rt_inf);
+
+ flag=gdk_pixmap_create_from_xpm_d(GTK_WIDGET(map)->window, &flag_mask, NULL, flag_xpm);
+ gc=gdk_gc_new(map->DrawingBuffer);
+
+ gdk_gc_set_clip_origin(gc,pnt.x, pnt.y-15);
+ gdk_gc_set_clip_mask(gc,flag_mask);
+ gdk_draw_pixmap(GTK_WIDGET(map)->window,
+ gc,
+ flag,
+ 0, 0, pnt.x, pnt.y-15, 16, 16);
+ printf("Segment ID 0x%lx\n", rt_inf->str_inf.str->segid);
+#if 0
+ printf("Segment Begin 0x%lx, 0x%lx, 0x%x\n", route_info.seg1.xy.x, route_info.seg1.xy.y, route_info.seg1.h);
+ printf("Segment End 0x%lx, 0x%lx, 0x%x\n", route_info.seg2.xy.x, route_info.seg2.xy.y, route_info.seg2.h);
+#endif
+
+#if 0
+ transform(map, &route_info.seg1.xy, &pnt); gdk_draw_arc(GTK_WIDGET(map)->window, map->gc[GC_BLACK], TRUE, pnt.x-r/2, pnt.y-r/2, r, r, 0, 64*360);
+ transform(map, &route_info.line1.xy, &pnt); gdk_draw_arc(GTK_WIDGET(map)->window, map->gc[GC_BLACK], TRUE, pnt.x-r/2, pnt.y-r/2, r, r, 0, 64*360);
+ transform(map, &route_info.seg2.xy, &pnt); gdk_draw_arc(GTK_WIDGET(map)->window, map->gc[GC_BLACK], TRUE, pnt.x-r/2, pnt.y-r/2, r, r, 0, 64*360);
+ transform(map, &route_info.line2.xy, &pnt); gdk_draw_arc(GTK_WIDGET(map)->window, map->gc[GC_BLACK], TRUE, pnt.x-r/2, pnt.y-r/2, r, r, 0, 64*360);
+ transform(map, &route_info.pos.xy, &pnt); gdk_draw_arc(GTK_WIDGET(map)->window, map->gc[GC_BLACK], TRUE, pnt.x-r/2, pnt.y-r/2, r, r, 0, 64*360);
+#endif
+ printf("offset=%d\n", rt_inf->offset);
+ printf("seg1_len=%d\n", rt_inf->seg1_len);
+ printf("seg2_len=%d\n", rt_inf->seg2_len);
+
+ if (trace) {
+ start=rt_inf;
+ count=0;
+ route_path_free(this);
+ route_find(this, start, end);
+ map_redraw(map);
+ } else {
+ if (! count) {
+ start=rt_inf;
+ count=1;
+ }
+ else {
+ end=rt_inf;
+ count=0;
+ }
+ }
+#endif
+}
+
+void
+route_start(struct route *this, struct container *co)
+{
+ route_do_start(this, end, start);
+}
+
+void
+route_trace(struct container *co)
+{
+ trace=1-trace;
+}
+
+void
+route_data_free(void *t)
+{
+ route_blocklist_free(t);
+ route_path_free(t);
+ route_points_free(t);
+ route_segments_free(t);
+}
+
+void
+route_do_start(struct route *this, struct route_info *rt_start, struct route_info *rt_end)
+{
+ int res;
+ struct route_point *seg1,*seg2,*pos;
+ struct coord c[2];
+ struct timeval tv[4];
+
+ phrase_route_calc(speech_handle);
+ route_data_free(this);
+ gettimeofday(&tv[0], NULL);
+ c[0]=rt_start->pos.xy;
+ c[1]=rt_end->pos.xy;
+ route_build_graph(this,this->map_data,c,2);
+ gettimeofday(&tv[1], NULL);
+ seg1=route_point_add(this, &rt_end->seg1, 1);
+ pos=route_point_add(this, &rt_end->pos, 2);
+ seg2=route_point_add(this ,&rt_end->seg2, 1);
+ route_segment_add(this, seg1, pos, rt_end->seg1_len, rt_end->str_inf.str, rt_end->offset, 0);
+ route_segment_add(this, seg2, pos, rt_end->seg2_len, rt_end->str_inf.str, -rt_end->offset, 0);
+
+ printf("flood\n");
+ route_flood(this, rt_end);
+ gettimeofday(&tv[2], NULL);
+ printf("find\n");
+ res=route_find(this, rt_start, rt_end);
+ printf("ok\n");
+ gettimeofday(&tv[3], NULL);
+
+ printf("graph time %ld\n", (tv[1].tv_sec-tv[0].tv_sec)*1000+(tv[1].tv_usec-tv[0].tv_usec)/1000);
+ printf("flood time %ld\n", (tv[2].tv_sec-tv[1].tv_sec)*1000+(tv[2].tv_usec-tv[1].tv_usec)/1000);
+ printf("find time %ld\n", (tv[3].tv_sec-tv[2].tv_sec)*1000+(tv[3].tv_usec-tv[2].tv_usec)/1000);
+ phrase_route_calculated(speech_handle, this);
+
+}
+
+
+int
+route_destroy(void *t)
+{
+ struct route *this=t;
+
+ route_data_free(t);
+ if (this->pos)
+ g_free(this->pos);
+ if (this->dst)
+ g_free(this->dst);
+ g_free(this);
+ return 0;
+}
+
+
+struct tm *
+route_get_eta(struct route *this)
+{
+ time_t eta;
+
+ eta=time(NULL)+this->route_time_val;
+
+ return localtime(&eta);
+}
+
+double
+route_get_len(struct route *this)
+{
+ return this->route_len_val;
+}
+
+struct route_crossings *
+route_crossings_get(struct route *this, struct coord *c)
+{
+ struct coord3d c3;
+ struct route_point *pnt;
+ struct route_segment *seg;
+ int crossings=0;
+ struct route_crossings *ret;
+
+ c3.xy=*c;
+ c3.h=0;
+ pnt=route_get_point(this, &c3);
+ seg=pnt->start;
+ while (seg) {
+ crossings++;
+ seg=seg->start_next;
+ }
+ seg=pnt->end;
+ while (seg) {
+ crossings++;
+ seg=seg->end_next;
+ }
+ ret=g_malloc(sizeof(struct route_crossings)+crossings*sizeof(struct route_crossing));
+ ret->count=crossings;
+ return ret;
+}
diff --git a/route.h b/route.h
new file mode 100644
index 00000000..0b249129
--- /dev/null
+++ b/route.h
@@ -0,0 +1,48 @@
+struct route_path_segment {
+ struct route_path_segment *next;
+ long segid;
+ int offset;
+ int dir;
+ int time;
+ int length;
+ struct coord c[2];
+};
+
+struct route_crossing {
+ long segid;
+ int dir;
+};
+
+struct route_crossings {
+ int count;
+ struct route_crossing crossing[0];
+};
+
+struct route;
+struct map_data;
+struct container;
+struct route_info;
+
+struct route *route_new(void);
+int route_destroy();
+void route_mapdata_set(struct route *this, struct map_data *mdata);
+struct map_data* route_mapdata_get(struct route *this);
+void route_display_points(struct route *this, struct container *co);
+void route_click(struct route *this, struct container *co, int x, int y);
+void route_start(struct route *this, struct container *co);
+void route_set_position(struct route *this, struct coord *pos);
+void route_set_destination(struct route *this, struct coord *dst);
+struct coord *route_get_destination(struct route *this);
+struct route_path_segment *route_path_get(struct route *, int segid);
+struct route_path_segment *route_path_get_all(struct route *this);
+void route_trace(struct container *co);
+struct street_str *route_info_get_street(struct route_info *rt);
+struct block_info *route_info_get_block(struct route_info *rt);
+struct route_info *route_find_nearest_street(struct map_data *mdata, struct coord *c);
+void route_find_point_on_street(struct route_info *rt_inf);
+void route_do_start(struct route *this, struct route_info *rt_start, struct route_info *rt_end);
+int route_find(struct route *this, struct route_info *rt_start, struct route_info *rt_end);
+struct tm *route_get_eta(struct route *this);
+double route_get_len(struct route *this);
+struct route_crossings *route_crossings_get(struct route *this, struct coord *c);
+
diff --git a/search.c b/search.c
new file mode 100644
index 00000000..165282ce
--- /dev/null
+++ b/search.c
@@ -0,0 +1,442 @@
+#include <glib.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "search.h"
+#include "coord.h"
+#include "country.h"
+#include "town.h"
+#include "street.h"
+#include "street_name.h"
+
+
+struct search {
+ struct map_data *map_data;
+ char *country;
+ GHashTable *country_hash;
+ char *postal;
+ char *town;
+ GHashTable *town_hash;
+ char *district;
+ GHashTable *district_hash;
+ char *street;
+ GHashTable *street_hash;
+ char *number;
+ int number_low, number_high;
+ int (*func)(struct search_destination *dest, void *user_data);
+ void *user_data;
+};
+
+struct dest_town {
+ int country;
+ int assoc;
+ char *name;
+ char postal_code[16];
+ struct town town;
+};
+
+static GHashTable *
+search_country_new(void)
+{
+ return g_hash_table_new_full(NULL, NULL, NULL, g_free);
+}
+
+static int
+search_country_add(struct country *cou, void *data)
+{
+ struct search *search=data;
+ struct country *cou2;
+
+ void *first;
+ first=g_hash_table_lookup(search->country_hash, (void *)(cou->id));
+ if (! first) {
+ cou2=g_new(struct country, 1);
+ *cou2=*cou;
+ g_hash_table_insert(search->country_hash, (void *)(cou->id), cou2);
+ }
+ return 0;
+}
+
+static void
+search_country_show(gpointer key, gpointer value, gpointer user_data)
+{
+ struct country *cou=value;
+ struct search *search=(struct search *)user_data;
+ struct search_destination dest;
+
+ memset(&dest, 0, sizeof(dest));
+ dest.country=cou;
+ dest.country_name=cou->name;
+ dest.country_car=cou->car;
+ dest.country_iso2=cou->iso2;
+ dest.country_iso3=cou->iso3;
+ (*search->func)(&dest, search->user_data);
+}
+
+static guint
+search_town_hash(gconstpointer key)
+{
+ const struct dest_town *hash=key;
+ gconstpointer hashkey=(gconstpointer)(hash->country^hash->assoc);
+ return g_direct_hash(hashkey);
+}
+
+static gboolean
+search_town_equal(gconstpointer a, gconstpointer b)
+{
+ const struct dest_town *t_a=a;
+ const struct dest_town *t_b=b;
+ if (t_a->assoc == t_b->assoc && t_a->country == t_b->country) {
+ if (t_a->name && t_b->name && strcmp(t_a->name, t_b->name))
+ return FALSE;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+
+static GHashTable *
+search_town_new(void)
+{
+ return g_hash_table_new_full(search_town_hash, search_town_equal, NULL, g_free);
+}
+
+
+static int
+search_town_add(struct town *town, void *data)
+{
+ struct search *search=data;
+ struct dest_town *first;
+
+ struct dest_town cmp;
+ char *zip1, *zip2;
+
+ if (town->id == 0x1d546b7e) {
+ printf("found\n");
+ }
+ cmp.country=town->country;
+ cmp.assoc=town->street_assoc;
+ cmp.name=town->name;
+ first=g_hash_table_lookup(search->town_hash, &cmp);
+ if (! first) {
+ first=g_new(struct dest_town, 1);
+ first->country=cmp.country;
+ first->assoc=cmp.assoc;
+ strcpy(first->postal_code, town->postal_code2);
+ first->name=town->name;
+ first->town=*town;
+ g_hash_table_insert(search->town_hash, first, first);
+ } else {
+ zip1=town->postal_code2;
+ zip2=first->postal_code;
+ while (*zip1 && *zip2) {
+ if (*zip1 != *zip2) {
+ while (*zip2) {
+ *zip2++='.';
+ }
+ break;
+ }
+ zip1++;
+ zip2++;
+ }
+ }
+ cmp.name=NULL;
+ cmp.assoc=town->id;
+ first=g_hash_table_lookup(search->district_hash, &cmp);
+ if (! first) {
+ first=g_new(struct dest_town, 1);
+ first->country=cmp.country;
+ first->assoc=cmp.assoc;
+ first->name=NULL;
+ first->town=*town;
+ g_hash_table_insert(search->district_hash, first, first);
+ }
+ return 0;
+}
+
+static void
+search_town_search(gpointer key, gpointer value, gpointer user_data)
+{
+ struct country *cou=value;
+ struct search *search=user_data;
+
+ town_search_by_name(search->map_data, cou->id, search->town, 1, search_town_add, search);
+}
+
+static void
+search_town_set(const struct dest_town *town, struct search_destination *dest, int full)
+{
+ char country[32];
+ struct country *cou;
+ if ((cou=country_get_by_id(town->country))) {
+ dest->country=cou;
+ dest->country_name=cou->name;
+ dest->country_car=cou->car;
+ dest->country_iso2=cou->iso2;
+ dest->country_iso3=cou->iso3;
+ } else {
+ sprintf(country,"(%d)", town->country);
+ dest->country=NULL;
+ dest->country_car=country;
+ }
+ if (full) {
+ dest->town_postal=(char *)(town->town.postal_code2);
+ dest->town_name=g_convert(town->town.name,-1,"utf-8","iso8859-1",NULL,NULL,NULL);
+ if (town->town.district[0])
+ dest->district=g_convert(town->town.district,-1,"utf-8","iso8859-1",NULL,NULL,NULL);
+ else
+ dest->district=NULL;
+ } else {
+ dest->town_postal=(char *)(town->postal_code);
+ dest->town_name=g_convert(town->name,-1,"utf-8","iso8859-1",NULL,NULL,NULL);
+ }
+}
+
+
+static void
+search_town_show(gpointer key, gpointer value, gpointer user_data)
+{
+ struct dest_town *town=value;
+ struct search *search=user_data;
+ struct search_destination dest;
+
+ memset(&dest, 0, sizeof(dest));
+ dest.town=&town->town;
+ dest.street_name=NULL;
+ dest.c=town->town.c;
+ search_town_set(town, &dest, 0);
+
+ (*search->func)(&dest, search->user_data);
+}
+
+
+GHashTable *
+search_street_new(void)
+{
+ return g_hash_table_new_full(NULL, NULL, NULL, g_free);
+}
+
+
+static int
+search_street_add(struct street_name *name, void *data)
+{
+ struct search *search=data;
+ struct street_name *name2;
+
+ name2=g_new(struct street_name, 1);
+ *name2=*name;
+ g_hash_table_insert(search->street_hash, name2, name2);
+ return 0;
+}
+
+static int
+number_partial(int search, int ref, int ext)
+{
+ int max=1;
+
+ printf("number_partial(%d,%d,%d)", search, ref, ext);
+ if (ref >= 10)
+ max=10;
+ if (ref >= 100)
+ max=100;
+ if (ref >= 1000)
+ max=1000;
+ while (search < max) {
+ search*=10;
+ search+=ext;
+ }
+ printf("max=%d result=%d\n", max, search);
+ return search;
+}
+
+static int
+check_number(int low, int high, int s_low, int s_high)
+{
+ int debug=0;
+
+ if (debug)
+ printf("check_number(%d,%d,%d,%d)\n", low, high, s_low, s_high);
+ if (low <= s_high && high >= s_low)
+ return 1;
+ if (s_low == s_high) {
+ if (low <= number_partial(s_high, high, 9) && high >= number_partial(s_low, low, 0))
+ return 1;
+ }
+ if (debug)
+ printf("return 0\n");
+ return 0;
+}
+
+static void
+search_street_show_common(gpointer key, gpointer value, gpointer user_data, int number)
+{
+ struct street_name *name=value;
+ struct search *search=user_data;
+ char *utf8;
+ struct dest_town cmp;
+ struct dest_town *town;
+ char buffer[32];
+ struct street_name_info info;
+ struct street_name_number_info num_info;
+ struct search_destination dest;
+ int debug=0;
+
+ memset(&dest, 0, sizeof(dest));
+ name->tmp_len=name->aux_len;
+ name->tmp_data=name->aux_data;
+ while (street_name_get_info(&info, name)) {
+ cmp.country=info.country;
+ cmp.assoc=info.dist;
+ cmp.name=NULL;
+ town=g_hash_table_lookup(search->district_hash, &cmp);
+ if (debug)
+ printf("town=%p\n", town);
+ if (town) {
+ search_town_set(town, &dest, 1);
+ utf8=g_convert(name->name2,-1,"utf-8","iso8859-1",NULL,NULL,NULL);
+ dest.street_name=utf8;
+ if (number) {
+ info.tmp_len=info.aux_len;
+ info.tmp_data=info.aux_data;
+ while (street_name_get_number_info(&num_info, &info)) {
+ dest.town=&town->town;
+ dest.street=name;
+ dest.c=num_info.c;
+ if (check_number(num_info.first, num_info.last, search->number_low, search->number_high)) {
+ if (num_info.first == num_info.last)
+ sprintf(buffer,"%d",num_info.first);
+ else
+ sprintf(buffer,"%d-%d",num_info.first,num_info.last);
+ dest.street_number=buffer;
+ (*search->func)(&dest, search->user_data);
+ }
+ }
+ } else {
+ dest.town=&town->town;
+ dest.street=name;
+ dest.c=info.c;
+ (*search->func)(&dest, search->user_data);
+ }
+ g_free(utf8);
+ } else {
+ printf("Town for '%s' not found\n", name->name2);
+ }
+ }
+}
+
+static void
+search_street_show(gpointer key, gpointer value, gpointer user_data)
+{
+ search_street_show_common(key, value, user_data, 0);
+}
+
+static void
+search_street_show_number(gpointer key, gpointer value, gpointer user_data)
+{
+ search_street_show_common(key, value, user_data, 1);
+}
+
+static void
+search_street_search(gpointer key, gpointer value, gpointer user_data)
+{
+ const struct dest_town *town=value;
+ struct search *search=user_data;
+ street_name_search(search->map_data, town->country, town->assoc, search->street, 1, search_street_add, search);
+}
+
+
+
+void search_update(struct search *search, enum search_param what, char *val)
+{
+ char *dash;
+
+ if (what == search_country) {
+ if (search->country_hash) g_hash_table_destroy(search->country_hash);
+ search->country_hash=NULL;
+ }
+ if (what == search_country || what == search_town) {
+ if (search->town_hash) g_hash_table_destroy(search->town_hash);
+ if (search->district_hash) g_hash_table_destroy(search->district_hash);
+ search->town_hash=NULL;
+ search->district_hash=NULL;
+ }
+
+ if (what == search_country || what == search_town || what == search_street) {
+ if (search->street_hash) g_hash_table_destroy(search->street_hash);
+ search->street_hash=NULL;
+ }
+
+ if (what == search_country) {
+ g_free(search->country);
+ search->country=g_strdup(val);
+ if (val) {
+ search->country_hash=search_country_new();
+ country_search_by_name(val, 1, search_country_add, search);
+ country_search_by_car(val, 1, search_country_add, search);
+ country_search_by_iso2(val, 1, search_country_add, search);
+ country_search_by_iso3(val, 1, search_country_add, search);
+ g_hash_table_foreach(search->country_hash, search_country_show, search);
+ }
+ }
+ if (what == search_town) {
+ g_free(search->town);
+ search->town=g_strdup(val);
+ if (val) {
+ search->town_hash=search_town_new();
+ search->district_hash=search_town_new();
+ g_hash_table_foreach(search->country_hash, search_town_search, search);
+ g_hash_table_foreach(search->town_hash, search_town_show, search);
+ }
+ }
+ if (what == search_street) {
+ g_free(search->street);
+ search->street=g_strdup(val);
+ if (val) {
+ search->street_hash=search_street_new();
+ g_hash_table_foreach(search->town_hash, search_street_search, search);
+ g_hash_table_foreach(search->street_hash, search_street_show, search);
+ }
+ }
+ if (what == search_number) {
+ g_free(search->number);
+ search->number=g_strdup(val);
+ if (val) {
+ char buffer[strlen(val)+1];
+ strcpy(buffer, val);
+ dash=index(buffer,'-');
+ if (dash) {
+ *dash++=0;
+ search->number_low=atoi(buffer);
+ if (strlen(val))
+ search->number_high=atoi(dash);
+ else
+ search->number_high=10000;
+ } else {
+ if (!strlen(val)) {
+ search->number_low=0;
+ search->number_high=10000;
+ } else {
+ search->number_low=atoi(val);
+ search->number_high=atoi(val);
+ }
+ }
+ g_hash_table_foreach(search->street_hash, search_street_show_number, search);
+ }
+ }
+}
+
+struct search *
+search_new(struct map_data *mdat, char *country, char *postal, char *town, char *district, char *street, char *number, int (*func)(struct search_destination *dest, void *user_data), void *user_data)
+{
+ struct search *this=g_new0(struct search,1);
+ this->map_data=mdat;
+ this->country=g_strdup(country);
+ this->postal=g_strdup(postal);
+ this->town=g_strdup(town);
+ this->district=g_strdup(district);
+ this->street=g_strdup(street);
+ this->number=g_strdup(number);
+ this->func=func;
+ this->user_data=user_data;
+ return this;
+}
diff --git a/search.h b/search.h
new file mode 100644
index 00000000..88f38826
--- /dev/null
+++ b/search.h
@@ -0,0 +1,30 @@
+enum search_param {
+ search_country,
+ search_postal,
+ search_town,
+ search_district,
+ search_street,
+ search_number
+};
+
+struct search_destination {
+ char *country_name;
+ char *country_car;
+ char *country_iso2;
+ char *country_iso3;
+ char *town_postal;
+ char *town_name;
+ char *district;
+ char *street_name;
+ char *street_number;
+ struct country *country;
+ struct town *town;
+ struct street_name *street;
+ struct coord *c;
+};
+
+struct search;
+struct map_data;
+
+void search_update(struct search *search, enum search_param what, char *val);
+struct search *search_new(struct map_data *mdat, char *country, char *postal, char *town, char *district, char *street, char *number, int (*func)(struct search_destination *dest, void *user_data), void *user_data);
diff --git a/speech.c b/speech.c
new file mode 100644
index 00000000..48ba8263
--- /dev/null
+++ b/speech.c
@@ -0,0 +1,61 @@
+/* speechd simple client program
+ * CVS revision: $Id: speech.c,v 1.1.1.1 2005-11-27 20:48:30 martin-s Exp $
+ * Author: Tomas Cerha <cerha@brailcom.cz> */
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <glib.h>
+#include <stdarg.h>
+
+#include <libspeechd.h>
+#include "speech.h"
+
+struct speech {
+ int sockfd;
+};
+
+struct speech *
+speech_new(void) {
+ struct speech *this;
+ int sockfd;
+
+ sockfd = spd_init("map","main");
+ if (sockfd == 0)
+ return NULL;
+ this=g_new(struct speech,1);
+ if (this) {
+ this->sockfd=sockfd;
+ }
+ return this;
+}
+
+int
+speech_say(struct speech *this, char *text) {
+ int err;
+
+ err = spd_sayf(this->sockfd, 2, text);
+ if (err != 1)
+ return 1;
+ return 0;
+}
+
+int
+speech_sayf(struct speech *this, char *format, ...) {
+ char buffer[8192];
+ va_list ap;
+ va_start(ap,format);
+ vsnprintf(buffer, 8192, format, ap);
+ return speech_say(this, buffer);
+}
+
+int
+speech_destroy(struct speech *this) {
+ spd_close(this->sockfd);
+ g_free(this);
+ return 0;
+}
diff --git a/speech.h b/speech.h
new file mode 100644
index 00000000..a4038e06
--- /dev/null
+++ b/speech.h
@@ -0,0 +1,5 @@
+struct speech;
+struct speech *speech_new(void);
+int speech_say(struct speech *this, char *text);
+int speech_sayf(struct speech *this, char *format, ...);
+int speech_destroy(struct speech *this);
diff --git a/statusbar.h b/statusbar.h
new file mode 100644
index 00000000..1b9092c9
--- /dev/null
+++ b/statusbar.h
@@ -0,0 +1,10 @@
+struct route;
+struct statusbar_gui;
+
+struct statusbar {
+ void (*statusbar_destroy)(struct statusbar *this);
+ void (*statusbar_mouse_update)(struct statusbar *this, struct transformation *tr, struct point *p);
+ void (*statusbar_route_update)(struct statusbar *this, struct route *route);
+ void (*statusbar_gps_update)(struct statusbar *this, int sats, int qual, double lng, double lat, double height, double direction, double speed);
+ struct statusbar_gui *gui;
+};
diff --git a/street.c b/street.c
new file mode 100644
index 00000000..f449f1e1
--- /dev/null
+++ b/street.c
@@ -0,0 +1,455 @@
+#include <assert.h>
+#include <stdio.h>
+#include <malloc.h>
+#include <unistd.h>
+#include <glib.h>
+#include "container.h"
+#include "coord.h"
+#include "map_data.h"
+#include "file.h"
+#include "block.h"
+#include "route.h"
+#include "street.h"
+#include "street_data.h"
+#include "street_name.h"
+#include "display.h"
+#include "draw_info.h"
+#include "data_window.h"
+#include "data.h"
+#include "tree.h"
+
+
+static void
+street_draw_segment(struct container *co, struct segment *seg, unsigned char **pos, unsigned char *end, struct coord *ref, int bytes, int include, int disp)
+{
+ int j,flags,limit;
+ struct coord f;
+ struct coord l[2];
+ struct street_str *str=seg->data[0];
+ char *label;
+ struct street_name name;
+ struct param_list param[100];
+ struct route_path_segment *route;
+ struct display_list **displ=co->disp;
+ int max=10000;
+ struct point xpoints[max];
+
+ flags=0;
+ j=0;
+ while (! flags && *pos < end) {
+ flags=street_get_coord(pos, bytes, ref, &f);
+ if (! j) {
+ l[0]=f;
+ l[1]=f;
+ } else {
+ if (include || !flags) {
+ if (f.x < l[0].x) l[0].x=f.x;
+ if (f.x > l[1].x) l[1].x=f.x;
+ if (f.y > l[0].y) l[0].y=f.y;
+ if (f.y < l[1].y) l[1].y=f.y;
+ }
+ }
+ transform(co->trans, &f, &xpoints[j]);
+ if (! j)
+ flags=0;
+ j++;
+ assert(j < max);
+ }
+ if (! include)
+ j--;
+ if (is_visible(co->trans, l) && str->type) {
+ label=NULL;
+ if (str->nameid) {
+ street_name_get_by_id(&name, seg->blk_inf.mdata, str->nameid);
+ if (name.name2[0])
+ label=name.name2;
+ else
+ label=name.name1;
+ }
+ if (str->nameid && name.townassoc < 0 ) {
+ char buffer[128];
+ sprintf(buffer,"-0x%x", -name.townassoc);
+ label=g_strdup(buffer);
+ }
+ limit=0;
+ if (str->limit == 0x30)
+ limit=1;
+ if (str->limit == 0x03)
+ limit=-1;
+ if (str->type & 0x40)
+ limit=-limit;
+ display_add(&displ[disp], 2, limit, label, j, xpoints, NULL, seg, sizeof(*seg));
+ if (co->route && (route=route_path_get(co->route, str->segid))) {
+ if (! route->offset)
+ display_add(&displ[display_street_route], 2, 0, label, j, xpoints, NULL, NULL, 0);
+ else if (route->offset > 0)
+ display_add(&displ[display_street_route], 2, 0, label, route->offset, xpoints, NULL, NULL, 0);
+ else
+ display_add(&displ[display_street_route], 2, 0, label, j+route->offset, xpoints-route->offset, NULL, NULL, 0);
+ }
+ if (co->data_window[data_window_type_street])
+ data_window_add(co->data_window[data_window_type_street], param, street_get_param(seg, param, 100, 0));
+ }
+ *pos-=2*bytes;
+}
+
+void
+street_safety_check(struct street_str *str)
+{
+#if 0
+ if (!((str->type & 0xf0) == 0x0 || (str->type & 0xf0) == 0x40)) {
+ printf("str->type=0x%x\n", str->type);
+ }
+ assert((str->type & 0xf0) == 0x0 || (str->type & 0xf0) == 0x40);
+#endif
+ assert(str->type != 0xe && str->type != 0x4e && str->type != 0x40);
+ assert(str->unknown2 == str->unknown3);
+ assert(str->unknown2 == 0x40 || str->unknown2 == 0x44);
+}
+
+struct street_header_type {
+ struct street_header *header;
+ int type_count;
+ struct street_type *type;
+};
+
+static void
+street_header_type_get(struct block *blk, unsigned char **p_p, struct street_header_type *ret)
+{
+ unsigned char *p=*p_p;
+ ret->header=(struct street_header *)p;
+ p+=sizeof(struct street_header);
+ ret->type_count=blk->count;
+ ret->type=(struct street_type *)p;
+ p+=ret->type_count*sizeof(struct street_type);
+ assert(ret->header->count == blk->count);
+ *p_p=p;
+}
+
+static void
+street_coord_get_begin(unsigned char **p_p)
+{
+ unsigned char *p=*p_p;
+ struct street_str *str;
+
+ str=(struct street_str *)p;
+ while (str->segid) {
+ str++;
+ }
+ p=(unsigned char *)str;
+ p+=4;
+ *p_p=p;
+}
+
+void
+street_draw_block(struct block_info *blk_inf, unsigned char *p, unsigned char *end, void *data)
+{
+ struct street_str *str;
+ struct street_header_type header_type;
+ struct street_type *str_type;
+ int include,count,ncount,bytes,offset;
+ struct draw_info *drw_inf=data;
+ struct segment seg;
+
+ seg.blk_inf=*blk_inf;
+
+ street_header_type_get(blk_inf->block, &p, &header_type);
+ if (header_type.header->order >= drw_inf->limit)
+ return;
+
+ str_type=header_type.type;
+ bytes=street_get_bytes(blk_inf->block);
+ str=(struct street_str *)p;
+ count=0;
+ ncount=0;
+ street_coord_get_begin(&p);
+ str_type--;
+ while (str->segid) {
+ include=1;
+ if (str[1].segid < 0) {
+ include=0;
+ str_type++;
+ }
+ seg.data[0]=str;
+ seg.data[1]=str_type;
+ seg.data[2]=p;
+ seg.data[3]=header_type.header;
+ street_safety_check(str);
+ offset=0;
+ if (header_type.header->order < 0x2)
+ offset=3;
+ else if (header_type.header->order < 0x4 && str->type != 0x6 && str->type != 0x46)
+ offset=2;
+ else if (header_type.header->order < 0x6)
+ offset=1;
+ if (str->limit == 0x33)
+ offset=4;
+ street_draw_segment(drw_inf->co, &seg, &p, end-4, blk_inf->block->c, bytes, include, drw_inf->display+offset);
+ str++;
+ }
+}
+
+void
+street_bti_draw_block(struct block_info *blk_inf, unsigned char *p, unsigned char *end, void *data)
+{
+ struct draw_info *drw_inf=data;
+ struct street_bti *str;
+ struct point pnt;
+ struct param_list param[100];
+ struct segment seg;
+
+ while (p < end) {
+ str=(struct street_bti *)p;
+ seg.data[0]=str;
+ p+=sizeof(*str);
+ if (transform(drw_inf->co->trans, &str->c, &pnt)) {
+ display_add(&drw_inf->co->disp[display_bti], 4, 0, NULL, 1, &pnt, NULL, &seg, sizeof(seg));
+ if (drw_inf->co->data_window[data_window_type_point])
+ data_window_add(drw_inf->co->data_window[data_window_type_point], param, street_bti_get_param(&seg, param, 100));
+ }
+ }
+}
+
+void
+street_route_draw(struct container *co)
+{
+ struct route_path_segment *route=NULL;
+ struct point xpoints[2];
+
+ if (co->route)
+ route=route_path_get_all(co->route);
+ while (route) {
+ if (!route->segid) {
+ transform(co->trans, &route->c[0], &xpoints[0]);
+ transform(co->trans, &route->c[1], &xpoints[1]);
+ display_add(&co->disp[display_street_route], 2, 0, NULL, 2, xpoints, NULL, NULL, 0);
+ }
+ route=route->next;
+ }
+}
+
+struct street_coord *
+street_coord_get(struct block_info *blk_inf, struct street_str *str)
+{
+ struct block *blk;
+ unsigned char *p=(unsigned char *)(blk_inf->block),*end,*p_sav;
+ struct street_header_type hdr_type;
+ struct street_str *str_curr;
+ struct coord f,*c;
+ struct street_coord *ret;
+ int bytes,num,points,include;
+ int debug=0;
+
+ end=p;
+ blk=block_get(&p);
+ end+=blk->size;
+
+ street_header_type_get(blk, &p, &hdr_type);
+ str_curr=(struct street_str *)p;
+ num=str-str_curr;
+ street_coord_get_begin(&p);
+ bytes=street_get_bytes(blk);
+ if (debug) {
+ printf("num=%d\n", num);
+ }
+ street_get_coord(&p, bytes, blk->c, &f);
+ while (num && str_curr->segid) {
+ while (! street_get_coord(&p, bytes, blk->c, &f) && p < end);
+ str_curr++;
+ num--;
+ }
+ include=(str[1].segid > 0);
+ p_sav=p-2*bytes;
+ points=1+include;
+ while (! street_get_coord(&p, bytes, blk->c, &f) && p < end)
+ points++;
+
+ if (debug)
+ printf("p=%p points=%d\n",p_sav, points);
+ p=p_sav;
+ ret=malloc(sizeof(struct street_coord)+points*sizeof(struct coord));
+ ret->count=points;
+ c=ret->c;
+ while (points) {
+ street_get_coord(&p, bytes, blk->c, c);
+ c++;
+ points--;
+ }
+ return ret;
+}
+
+#if 0
+struct street_nearest *
+street_find_nearest(struct map_data *mdata, struct coord *c)
+{
+ struct street_nearest *ret=g_new0(struct street_nearest,1);
+ struct transformation t;
+ int max_dist=1000;
+
+ transform_setup_source_rect_limit(&t,c,max_dist);
+
+ ret->click.xy=*c;
+ ret->dist=INT_MAX;
+ ret->mode=0;
+
+ map_data_foreach(mdata, file_street_str, &t, 48, route_process_street_block, ret);
+
+ ret->mode=1;
+ ret->dist=INT_MAX;
+
+ return ret;
+}
+
+#endif
+
+int
+street_get_by_id(struct map_data *mdat, int id, struct block_info *res_blk_inf, struct street_str **res_str)
+{
+ int debug=0;
+ int res,block,num;
+ struct map_data *mdat_res;
+ struct block *blk;
+ unsigned char *p;
+ struct street_header_type hdr_type;
+ struct street_str *str;
+
+ if (tree_search_hv_map(mdat, file_street_str, (id >> 8) | 0x31000000, id & 0xff, &res, &mdat_res)) {
+ return 1;
+ }
+
+ block=res >> 12;
+ num=res & 0xfff;
+ if (debug) {
+ printf("block=0x%x\n", block);
+ printf("num=0x%x\n", num);
+ }
+ blk=block_get_byindex(mdat_res->file[file_street_str], block, &p);
+ res_blk_inf->mdata=mdat_res;
+ res_blk_inf->file=mdat_res->file[file_street_str];
+ res_blk_inf->block=blk;
+ if (debug) {
+ printf("blk->count=0x%x\n", blk->count);
+ }
+ street_header_type_get(blk, &p, &hdr_type);
+ str=(struct street_str *)p;
+ str+=num;
+ *res_str=str;
+ return 0;
+}
+
+int
+street_get_param(struct segment *seg, struct param_list *param, int count, int verbose)
+{
+ char buffer[1024];
+ int i=count,j;
+ struct street_str *str=seg->data[0];
+ struct street_type *type=seg->data[1];
+ struct street_name name;
+ struct street_name_info name_info;
+#if 0
+ struct street_name_number_info name_number_info;
+#endif
+
+ param_add_hex("Type-Addr", (unsigned char *)type-seg->blk_inf.file->begin, &param, &count);
+ param_add_hex("Order", type->order, &param, &count);
+ param_add_hex("Country", type->country, &param, &count);
+
+ param_add_hex("Addr", (unsigned char *)str-seg->blk_inf.file->begin, &param, &count);
+ param_add_hex_sig("Seg-Id", str->segid, &param, &count);
+ param_add_hex("Limit", str->limit, &param, &count);
+ param_add_hex("Unknown2", str->unknown2, &param, &count);
+ param_add_hex("Unknown3", str->unknown3, &param, &count);
+ param_add_hex("Type", str->type, &param, &count);
+ param_add_hex("Name-Id", str->nameid, &param, &count);
+ if (str->segid) {
+ street_name_get_by_id(&name, seg->blk_inf.mdata, str->nameid);
+
+ param_add_hex("Len", name.len, &param, &count);
+ param_add_hex("Country", name.country, &param, &count);
+ param_add_hex_sig("TownAssoc", name.townassoc, &param, &count);
+ printf("TownAssoc 0x%lx\n", name.townassoc+str->segid);
+ param_add_string("Name1", name.name1, &param, &count);
+ param_add_string("Name2", name.name2, &param, &count);
+ param_add_hex("Segments", name.segment_count, &param, &count);
+ if (verbose) {
+ for (j = 0 ; j < name.segment_count ; j++) {
+ sprintf(buffer,"0x%x 0x%x", name.segments[j].country, name.segments[j].segid);
+ param_add_string("Segment", buffer, &param, &count);
+ }
+ param_add_hex("Len", name.aux_len, &param, &count);
+ while (street_name_get_info(&name_info, &name)) {
+ param_add_hex("Len", name_info.len, &param, &count);
+ param_add_hex("Tag", name_info.tag, &param, &count);
+ param_add_hex("Dist", name_info.dist, &param, &count);
+ param_add_hex("Country", name_info.country, &param, &count);
+ param_add_hex("X", name_info.c->x, &param, &count);
+ param_add_hex("Y", name_info.c->y, &param, &count);
+ param_add_dec("First", name_info.first, &param, &count);
+ param_add_dec("Last", name_info.last, &param, &count);
+ param_add_hex("Segments", name_info.segment_count, &param, &count);
+ }
+#if 0
+ int tag;
+ int k, segs;
+ printf("\n");
+ printf("Len 0x%x\n",get_short(&stn));
+ tag=*stn++;
+ printf("Tag 0x%x\n",tag);
+ if (tag == 0xc0 || tag == 0xd0 || tag == 0xe0) {
+ printf("DistAssoc 0x%lx\n",get_long(&stn));
+ printf("Country 0x%lx\n",get_long(&stn));
+ printf("X 0x%lx\n",get_long(&stn));
+ printf("Y 0x%lx\n",get_long(&stn));
+ printf("First %ld\n",get_triple(&stn));
+ printf("Last %ld\n",get_triple(&stn));
+ segs=get_long(&stn);
+ printf("Segs 0x%x\n",segs);
+ for (k = 0 ; k < 0 ; k++) {
+ printf("SegId 0x%lx\n", get_long(&stn));
+ printf("Country 0x%lx\n",get_long(&stn));
+ }
+ } else if (tag == 0x8f || tag == 0xaa || tag == 0xab || tag == 0xae || tag == 0xaf || tag == 0x9a || tag == 0x9e || tag == 0x9f) {
+ printf("X 0x%lx\n",get_long(&stn));
+ printf("Y 0x%lx\n",get_long(&stn));
+ printf("First %ld\n",get_triple(&stn));
+ printf("Last %ld\n",get_triple(&stn));
+ printf("SegId 0x%lx\n",get_long(&stn));
+ printf("Country 0x%lx\n",get_long(&stn));
+ } else {
+ printf("Unknown tag 0x%x\n", tag);
+ break;
+ }
+ }
+#endif
+ }
+ } else {
+ if (!verbose) {
+ param_add_string("Len", "", &param, &count);
+ param_add_string("Country", "", &param, &count);
+ param_add_string("TownAssoc", "", &param, &count);
+ param_add_string("Name1", "", &param, &count);
+ param_add_string("Name2", "", &param, &count);
+ param_add_string("Segments", "", &param, &count);
+ }
+ }
+ return i-count;
+}
+
+int
+street_bti_get_param(struct segment *seg, struct param_list *param, int count)
+{
+ int i=count;
+ struct street_bti *str=seg->data[0];
+
+ param_add_hex("Addr", (unsigned char *)str-seg->blk_inf.file->begin, &param, &count);
+ param_add_hex("Unknown1", str->unknown1, &param, &count);
+ param_add_hex("Segid1", str->segid1, &param, &count);
+ param_add_hex("Country1", str->country1, &param, &count);
+ param_add_hex("Segid2", str->segid2, &param, &count);
+ param_add_hex("Country2", str->country2, &param, &count);
+ param_add_hex("Unknown5", str->unknown5, &param, &count);
+ param_add_hex("X", str->c.x, &param, &count);
+ param_add_hex("Y", str->c.y, &param, &count);
+
+ return i-count;
+}
diff --git a/street.h b/street.h
new file mode 100644
index 00000000..65d024f1
--- /dev/null
+++ b/street.h
@@ -0,0 +1,53 @@
+struct container;
+struct block_info;
+struct segment;
+
+struct street_header {
+ unsigned char order;
+ int count;
+} __attribute__((packed));
+
+struct street_type {
+ unsigned char order;
+ unsigned short country;
+} __attribute__((packed));
+
+struct street_str {
+ long segid;
+ unsigned char limit; /* 0x03,0x30=One Way,0x33=No Passing */
+ unsigned char unknown2;
+ unsigned char unknown3;
+ unsigned char type;
+ unsigned long nameid;
+};
+
+struct street_bti {
+ unsigned char unknown1;
+ unsigned long segid1;
+ unsigned long country1;
+ unsigned long segid2;
+ unsigned long country2;
+ unsigned char unknown5;
+ struct coord c;
+} __attribute__((packed));
+
+struct street_route {
+ struct street_route *next;
+ long segid;
+ int offset;
+ struct coord c[2];
+};
+
+struct street_coord {
+ int count;
+ struct coord c[0];
+};
+
+
+void street_draw_block(struct block_info *blk_inf, unsigned char *start, unsigned char *end, void *data);
+struct street_coord *street_coord_get(struct block_info *blk_inf, struct street_str *str);
+int street_get_by_id(struct map_data *mdat, int id, struct block_info *res_blk_inf, struct street_str **res_str);
+void street_bti_draw_block(struct block_info *blk_inf, unsigned char *start, unsigned char *end, void *data);
+int street_get_param(struct segment *seg, struct param_list *param, int count, int verbose);
+int street_bti_get_param(struct segment *seg, struct param_list *param, int count);
+void street_route_draw(struct container *co);
diff --git a/street_data.h b/street_data.h
new file mode 100644
index 00000000..a7701430
--- /dev/null
+++ b/street_data.h
@@ -0,0 +1,60 @@
+static inline int street_get_bytes(struct block *blk)
+{
+ int bytes,dx,dy;
+ bytes=2;
+ dx=blk->c[1].x-blk->c[0].x;
+ dy=blk->c[0].y-blk->c[1].y;
+
+ if (dx > 32767 || dy > 32767)
+ bytes=3;
+ if (dx > 8388608 || dy > 8388608)
+ bytes=4;
+
+ return bytes;
+}
+
+static inline int street_get_coord(unsigned char **pos, int bytes, struct coord *ref, struct coord *f)
+{
+ unsigned char *p;
+ int x,y,flags=0;
+
+ p=*pos;
+ x=*p++;
+ x|=(*p++) << 8;
+ if (bytes == 2) {
+ if ( x > 0x7fff) {
+ x=0x10000-x;
+ flags=1;
+ }
+ }
+ else if (bytes == 3) {
+ x|=(*p++) << 16;
+ if ( x > 0x7fffff) {
+ x=0x1000000-x;
+ flags=1;
+ }
+ } else {
+ x|=(*p++) << 16;
+ x|=(*p++) << 24;
+ if (x < 0) {
+ x=-x;
+ flags=1;
+ }
+ }
+ y=*p++;
+ y|=(*p++) << 8;
+ if (bytes == 3) {
+ y|=(*p++) << 16;
+ } else if (bytes == 4) {
+ y|=(*p++) << 16;
+ y|=(*p++) << 24;
+ }
+ f->x=ref[0].x+x;
+ f->y=ref[1].y+y;
+#if 0
+ printf("0x%x,0x%x + 0x%x,0x%x = 0x%x,0x%x", x, y, ref[0].x, ref[1].y, f->x, f->y);
+#endif
+ *pos=p;
+ return flags;
+}
+
diff --git a/street_name.c b/street_name.c
new file mode 100644
index 00000000..202c8ae5
--- /dev/null
+++ b/street_name.c
@@ -0,0 +1,260 @@
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include "map_data.h"
+#include "street_name.h"
+#include "file.h"
+#include "block.h"
+#include "data.h"
+#include "tree.h"
+
+void
+street_name_get_by_id(struct street_name *name, struct map_data *mdat, unsigned long id)
+{
+ unsigned char *p;
+ if (id) {
+ p=mdat->file[file_strname_stn]->begin+id+0x2000;
+ street_name_get(name, &p);
+ }
+}
+
+void
+street_name_get(struct street_name *name, unsigned char **p)
+{
+ unsigned char *start=*p;
+ name->len=get_short(p);
+ name->country=get_short(p);
+ name->townassoc=get_long(p);
+ name->name1=get_string(p);
+ name->name2=get_string(p);
+ name->segment_count=get_long(p);
+ name->segments=(struct street_name_segment *)(*p);
+ (*p)+=(sizeof (struct street_name_segment))*name->segment_count;
+ name->aux_len=name->len-(*p-start);
+ name->aux_data=*p;
+ name->tmp_len=name->aux_len;
+ name->tmp_data=name->aux_data;
+ (*p)+=name->aux_len;
+}
+
+
+struct street_name_index {
+ unsigned short country;
+ long town_assoc;
+ char name[0];
+} __attribute__((packed));
+
+struct street_search_priv {
+ struct street_name_index *search;
+ int partial;
+ struct block_offset last_leaf;
+ struct map_data *last_mdat;
+ int last_res;
+};
+
+int street_name_compare(struct street_name_index *i1, struct street_name_index *i2, int partial)
+{
+ char c1_u,c2_u;
+ int ret=0;
+ int debug=0;
+
+ if (i1->country > i2->country)
+ ret=2;
+ if (i1->country < i2->country)
+ ret=-2;
+ if (! ret) {
+ if (debug)
+ printf("town: %ld vs %ld\n", i1->town_assoc,i2->town_assoc);
+ if (i1->town_assoc > i2->town_assoc)
+ ret=2;
+ if (i1->town_assoc < i2->town_assoc)
+ ret=-2;
+ if (! ret) {
+ char *c1=i1->name;
+ char *c2=i2->name;
+ if (debug)
+ printf("name: '%s' vs '%s'\n", c1, c2);
+ for (;;) {
+ c1_u=toupper(*c1);
+ c2_u=toupper(*c2);
+ if (c1_u == c2_u && c1) {
+ c1++;
+ c2++;
+ } else {
+ if (! c1_u && ! c2_u) {
+ if (debug)
+ printf("return 0: end of strings\n");
+ ret=0;
+ break;
+ }
+ if (c1_u == '\0' && c2_u == '\t') {
+ if (debug)
+ printf("return 0: delimiter found\n");
+ ret=0;
+ break;
+ }
+ if (c1_u == '\0' && partial) {
+ ret=-1;
+ break;
+ }
+ if (c1_u > c2_u) {
+ ret=2;
+ break;
+ }
+ if (c1_u < c2_u) {
+ ret=-2;
+ break;
+ }
+ }
+ }
+ }
+ }
+ return ret;
+}
+
+static int
+street_name_tree_process(int version, int leaf, unsigned char **s2, struct map_data *mdat, void *data)
+{
+ int ret;
+ struct street_search_priv *priv_data=data;
+ struct block_offset *blk_off;
+ int debug=0;
+
+ blk_off=(struct block_offset *)(*s2);
+ if (debug)
+ printf("0x%lx\n", get_long(s2));
+ else
+ get_long(s2);
+ struct street_name_index *i1=priv_data->search;
+ struct street_name_index *i2=(struct street_name_index *)(*s2);
+
+ if (debug) {
+ printf("Country %d %d\n",i1->country, i2->country);
+ printf("Town_Assoc 0x%lx 0x%lx\n",i1->town_assoc, i2->town_assoc);
+ printf("Name '%s' '%s'\n",i1->name, i2->name);
+ printf("Leaf Data 0x%x 0x%x %d\n", blk_off->offset, blk_off->block, sizeof(*blk_off));
+ }
+ *s2+=sizeof(*i2)+strlen(i2->name)+1;
+ ret=street_name_compare(i1, i2, priv_data->partial);
+ if (ret <= 0 && leaf == 1 && i1->country == i2->country && priv_data->last_res > 0) {
+ if (debug)
+ printf("street_tree_process: file='%s'\n", mdat->file[file_strname_stn]->name);
+ priv_data->last_leaf=*blk_off;
+ priv_data->last_mdat=mdat;
+ priv_data->last_res=ret;
+ }
+ if (debug)
+ printf("ret=%d\n", ret);
+ return ret;
+}
+
+int
+street_name_search(struct map_data *mdat, int country, int town_assoc, const char *name, int partial, int (*func)(struct street_name *name, void *data), void *data)
+{
+ struct street_search_priv priv;
+ unsigned char idx_buffer[strlen(name)+1+sizeof(struct street_name_index)];
+ struct street_name_index *idx=(struct street_name_index *)idx_buffer;
+ struct block *blk;
+ unsigned char *p,*end;
+ int blk_num,res;
+ struct street_name str_name;
+ char buffer2[4096];
+ struct street_name_index *idx2=(struct street_name_index *)buffer2;
+ int ret,debug=0;
+
+ priv.partial=partial;
+ idx->country=country;
+ idx->town_assoc=town_assoc;
+ strcpy(idx->name, name);
+ priv.search=idx;
+ priv.last_res=1;
+ priv.last_mdat=NULL;
+
+ tree_search_map(mdat, file_strname_stn, "b1", street_name_tree_process, &priv);
+
+#if 0
+ if (debug)
+ printf("street_search_by_name: name='%s' leaf_data=0x%x priv=%p\n",name,priv.last_leaf.data,&priv);
+#endif
+ if (!priv.last_mdat)
+ return 0;
+ blk_num=priv.last_leaf.offset;
+ if (debug) {
+ printf("block_num 0x%x\n", blk_num);
+ printf("file %p\n", priv.last_mdat->file[file_strname_stn]);
+ }
+ blk=block_get_byindex(priv.last_mdat->file[file_strname_stn], blk_num, &p);
+ end=(unsigned char *)blk;
+ end+=blk->size;
+
+ p=(unsigned char *)blk;
+ p+=12;
+ if (debug)
+ printf("p=%p\n",p);
+ while (p < end) {
+ street_name_get(&str_name, &p);
+ idx2->country=str_name.country;
+ idx2->town_assoc=str_name.townassoc;
+ strcpy(idx2->name, str_name.name2);
+ res=street_name_compare(idx,idx2,partial);
+ if (res == 0 || res == -1) {
+ if (debug)
+ printf("Add res=%d '%s' '%s'\n",res,str_name.name1,str_name.name2);
+ ret=(*func)(&str_name, data);
+ if (ret)
+ return 1;
+ }
+ if (res < -1)
+ break;
+ }
+ if (debug)
+ printf("street_search_by_name: %p vs %p\n", p, end);
+ return 0;
+}
+
+
+int
+street_name_get_info(struct street_name_info *inf, struct street_name *name)
+{
+ unsigned char *p=name->tmp_data;
+
+ if (name->tmp_len <= 0)
+ return 0;
+ inf->len=get_short(&p);
+ inf->tag=*p++;
+ inf->dist=get_long(&p);
+ inf->country=get_long(&p);
+ inf->c=coord_get(&p);
+ inf->first=get_triple(&p);
+ inf->last=get_triple(&p);
+ inf->segment_count=get_long(&p);
+ inf->segments=(struct street_segment *)p;
+ p+=sizeof(struct street_name_segment)*inf->segment_count;
+ inf->aux_len=name->tmp_data+name->tmp_len-p;
+ inf->aux_data=p;
+ inf->tmp_len=inf->aux_len;
+ inf->tmp_data=inf->aux_data;
+ name->tmp_data+=inf->len;
+ name->tmp_len-=inf->len;
+
+ return 1;
+}
+
+int
+street_name_get_number_info(struct street_name_number_info *num, struct street_name_info *inf)
+{
+ unsigned char *p=inf->tmp_data;
+
+ if (inf->tmp_len <= 0)
+ return 0;
+ num->len=get_short(&p);
+ num->tag=*p++;
+ num->c=coord_get(&p);
+ num->first=get_triple(&p);
+ num->last=get_triple(&p);
+ num->segment=(struct street_name_segment *)p;
+ inf->tmp_data+=num->len;
+ inf->tmp_len-=num->len;
+
+ return 1;
+}
diff --git a/street_name.h b/street_name.h
new file mode 100644
index 00000000..b6c178b1
--- /dev/null
+++ b/street_name.h
@@ -0,0 +1,51 @@
+struct street_name_segment {
+ int segid;
+ int country;
+};
+
+struct street_name {
+ int len;
+ int country;
+ int townassoc;
+ char *name1;
+ char *name2;
+ int segment_count;
+ struct street_name_segment *segments;
+ int aux_len;
+ unsigned char *aux_data;
+ int tmp_len;
+ unsigned char *tmp_data;
+};
+
+
+struct street_name_info {
+ int len;
+ int tag;
+ int dist;
+ int country;
+ struct coord *c;
+ int first;
+ int last;
+ int segment_count;
+ struct street_segment *segments;
+ int aux_len;
+ unsigned char *aux_data;
+ int tmp_len;
+ unsigned char *tmp_data;
+};
+
+struct street_name_number_info {
+ int len;
+ int tag;
+ struct coord *c;
+ int first;
+ int last;
+ struct street_name_segment *segment;
+};
+
+void street_name_get_by_id(struct street_name *name, struct map_data *mdat, unsigned long id);
+void street_name_get(struct street_name *name, unsigned char **p);
+int street_name_search(struct map_data *mdat, int country, int town_assoc, const char *name, int partial, int (*func)(struct street_name *name, void *data), void *data);
+int street_name_get_info(struct street_name_info *inf, struct street_name *name);
+int street_name_get_number_info(struct street_name_number_info *num, struct street_name_info *inf);
+
diff --git a/toolbar.h b/toolbar.h
new file mode 100644
index 00000000..ce2f18d6
--- /dev/null
+++ b/toolbar.h
@@ -0,0 +1,3 @@
+struct toolbar {
+ struct toolbar_gui *gui;
+};
diff --git a/town.c b/town.c
new file mode 100644
index 00000000..2d08427b
--- /dev/null
+++ b/town.c
@@ -0,0 +1,260 @@
+#include <stdio.h>
+#include <string.h>
+#include <malloc.h>
+#include "display.h"
+#include "coord.h"
+#include "data_window.h"
+#include "map_data.h"
+#include "town.h"
+#include "data.h"
+#include "tree.h"
+#include "block.h"
+#include "file.h"
+#include "draw_info.h"
+#include "container.h"
+#include "util.h"
+
+void
+town_get(struct town *town, unsigned char **p)
+{
+ town->id=get_long(p);
+ town->c=coord_get(p);
+ town->name=get_string(p);
+ town->district=get_string(p);
+ town->postal_code1=get_string(p);
+ town->order=get_char(p);
+ town->country=get_short(p);
+ town->type=get_char(p);
+ town->unknown2=get_long(p);
+ town->size=get_char(p);
+ town->street_assoc=get_long(p);
+ town->unknown3=get_char(p);
+ town->postal_code2=get_string(p);
+ town->unknown4=get_long(p);
+}
+
+void
+town_draw_block(struct block_info *blk_inf, unsigned char *start, unsigned char *end, void *data)
+{
+ unsigned char *p=start;
+ struct town town;
+ char *s;
+ struct point pnt;
+ struct param_list param[100];
+ struct segment seg;
+ struct draw_info *drw_inf=data;
+ struct data_window *win=drw_inf->co->data_window[data_window_type_town];
+
+ seg.blk_inf=*blk_inf;
+
+ p+=4;
+ while (p < end) {
+ seg.data[0]=p;
+ town_get(&town, &p);
+ if (town.order < drw_inf->limit && transform(drw_inf->co->trans, town.c, &pnt)) {
+ s=town.name;
+ if (*town.district)
+ s=town.district;
+ display_add(&drw_inf->co->disp[drw_inf->display+town.order], 3, 0, s, 1, &pnt, NULL, &seg, sizeof(seg));
+ if (win)
+ data_window_add(win, param, town_get_param(&seg, param, 100));
+ }
+ }
+}
+
+struct town_search_priv {
+ int country;
+ const char *name;
+ int name_len;
+ int partial;
+ int leaf;
+ int (*func)(struct town *, void *data);
+ void *data;
+};
+
+static int
+town_tree_process(int version, int leaf, unsigned char **s2, struct map_data *mdat, void *data)
+{
+ int len, cmp, country;
+ struct block *blk;
+ struct town_search_priv *priv_data=data;
+ struct file *f=mdat->file[file_town_twn];
+ struct block_offset *blk_off;
+ struct town town;
+ unsigned char *p,*name;
+ int ret,i,debug=0;
+
+ country=get_short(s2);
+ name=get_string(s2);
+ if (debug) {
+ printf("Country: 0x%x ", country);
+ printf("Town: '%s' ", name);
+ }
+ len=get_long(s2);
+
+ blk_off=(struct block_offset *)(*s2);
+ *s2+=len*4;
+
+ cmp=priv_data->country-country;
+ if (! cmp) {
+ if (leaf == -1)
+ priv_data->leaf=0;
+ if (leaf == 1)
+ priv_data->leaf=1;
+
+ if (debug) {
+ printf("'%s' vs '%s' version=%d\n", priv_data->name, name, version);
+ }
+ if (priv_data->leaf && priv_data->partial)
+ cmp=strncmp(priv_data->name,name,priv_data->name_len);
+ else
+ cmp=strcmp(priv_data->name,name);
+ } else {
+ if (debug) {
+ printf("country mismatch\n");
+ }
+ }
+
+ if (cmp > 0)
+ return 2;
+ if (cmp < 0)
+ return -2;
+ if (debug)
+ printf("%s\n", name);
+ for (i = 0 ; i < len ; i++) {
+ blk=block_get_byindex(f, blk_off->block, &p);
+ p=(unsigned char *)blk+blk_off->offset;
+ town_get(&town, &p);
+ ret=(*priv_data->func)(&town, priv_data->data);
+ if (ret)
+ return 1;
+ blk_off++;
+ }
+ return 0;
+}
+
+int
+town_search_by(struct map_data *mdat, char *ext, int country, const char *search, int partial, int (*func)(struct town *, void *data), void *data)
+{
+ struct town_search_priv priv_data;
+ priv_data.country=country;
+ priv_data.name=search;
+ priv_data.name_len=strlen(search);
+ priv_data.partial=partial;
+ priv_data.leaf=0;
+ priv_data.func=func;
+ priv_data.data=data;
+
+ tree_search_map(mdat, file_town_twn, ext, town_tree_process, &priv_data);
+
+ return 0;
+}
+
+int
+town_search_by_postal_code(struct map_data *mdat, int country, unsigned char *name, int partial, int (*func)(struct town *, void *data), void *data)
+{
+ unsigned char uname[strlen(name)+1];
+
+ strtoupper(uname, name);
+ return town_search_by(mdat, "b1", country, uname, partial, func, data);
+}
+
+
+int
+town_search_by_name(struct map_data *mdat, int country, const char *name, int partial, int (*func)(struct town *, void *data), void *data)
+{
+ unsigned char uname[strlen(name)+1];
+
+ strtolower(uname, (char *)name);
+ return town_search_by(mdat, "b2", country, uname, partial, func, data);
+}
+
+int
+town_search_by_district(struct map_data *mdat, int country, unsigned char *name, int partial, int (*func)(struct town *, void *data), void *data)
+{
+ unsigned char uname[strlen(name)+1];
+
+ strtoupper(uname, name);
+ return town_search_by(mdat, "b3", country, uname, partial, func, data);
+}
+
+int
+town_search_by_name_phon(struct map_data *mdat, int country, unsigned char *name, int partial, int (*func)(struct town *, void *data), void *data)
+{
+ unsigned char uname[strlen(name)+1];
+
+ strtoupper(uname, name);
+ return town_search_by(mdat, "b4", country, uname, partial, func, data);
+}
+
+int
+town_search_by_district_phon(struct map_data *mdat, int country, unsigned char *name, int partial, int (*func)(struct town *, void *data), void *data)
+{
+ unsigned char uname[strlen(name)+1];
+
+ strtoupper(uname, name);
+ return town_search_by(mdat, "b5", country, uname, partial, func, data);
+}
+
+
+void
+town_get_by_id(struct town *town, struct map_data *mdat, int country, int id)
+{
+ struct map_data *mdat_res;
+ struct file *f;
+ int res,block,offset;
+ struct block *blk;
+ unsigned char *p;
+ int search1,search2;
+ unsigned long id2=id;
+
+ if (id < 0)
+ id=-id;
+ search2 = id2 & 0xff;
+ search1 = (id2 >> 8) | (country << 24);
+ printf("country=0x%x id=0x%lx -id=0x%lx search1=0x%x search2=0x%x\n", country, id2, -id2, search1, search2);
+ return;
+ tree_search_hv_map(mdat, file_town_twn, search1, search2, &res, &mdat_res);
+ printf("res=0x%x\n",res);
+ block=res >> 16;
+ offset=res & 0xffff;
+ f=mdat_res->file[file_town_twn];
+ printf("file %s block 0x%x offset 0x%x\n", f->name, block, offset);
+ blk=block_get_byindex(f, block, &p);
+ p=(unsigned char *)blk+offset;
+ printf("addr 0x%x\n", p-f->begin);
+ town_get(town, &p);
+}
+
+int
+town_get_param(struct segment *seg, struct param_list *param, int count)
+{
+ int i=count;
+ unsigned char *p;
+ struct town town;
+
+ p=(unsigned char *)(seg->blk_inf.block);
+ p+=sizeof(*seg->blk_inf.block);
+
+ param_add_hex("Block Unknown", get_long(&p), &param, &count);
+ p=seg->data[0];
+ param_add_hex("Address", p-seg->blk_inf.file->begin, &param, &count);
+ town_get(&town, &p);
+ param_add_hex("ID", town.id, &param, &count);
+ param_add_hex_sig("X", town.c->x, &param, &count);
+ param_add_hex_sig("Y", town.c->y, &param, &count);
+ param_add_string("Name", town.name, &param, &count);
+ param_add_string("District", town.district, &param, &count);
+ param_add_string("PostalCode1", town.postal_code1, &param, &count);
+ param_add_hex("Order", town.order, &param, &count);
+ param_add_hex("Country", town.country, &param, &count);
+ param_add_hex("Type", town.type, &param, &count);
+ param_add_hex("Unknown2", town.unknown2, &param, &count);
+ param_add_hex("Size", town.size, &param, &count);
+ param_add_hex("StreetAssoc", town.street_assoc, &param, &count);
+ param_add_hex("Unknown3", town.unknown3, &param, &count);
+ param_add_string("PostalCode2", town.postal_code2, &param, &count);
+ param_add_hex("Unknown4", town.unknown4, &param, &count);
+
+ return i-count;
+}
diff --git a/town.h b/town.h
new file mode 100644
index 00000000..fce4b6b5
--- /dev/null
+++ b/town.h
@@ -0,0 +1,27 @@
+struct town {
+ unsigned long id;
+ struct coord *c;
+ char *name;
+ char *district;
+ char *postal_code1;
+ unsigned char order;
+ unsigned char type;
+ unsigned short country;
+ unsigned long unknown2;
+ unsigned char size;
+ unsigned long street_assoc;
+ unsigned char unknown3;
+ char *postal_code2;
+ unsigned long unknown4;
+};
+
+struct block_info;
+struct segment;
+struct container;
+struct param_list;
+struct map_data;
+
+void town_draw_block(struct block_info *blk_inf, unsigned char *start, unsigned char *end, void *data);
+int town_get_param(struct segment *seg, struct param_list *param, int count);
+int town_search_by_name(struct map_data *mdat, int country, const char *name, int partial, int (*func)(struct town *t, void *data), void *data);
+void town_get_by_id(struct town *town, struct map_data *mdat, int country, int id);
diff --git a/transform.c b/transform.c
new file mode 100644
index 00000000..a0f6fe6a
--- /dev/null
+++ b/transform.c
@@ -0,0 +1,363 @@
+#include <assert.h>
+#include <stdio.h>
+#include <math.h>
+#include <limits.h>
+#include "coord.h"
+#include "transform.h"
+
+int
+transform(struct transformation *t, struct coord *c, struct point *p)
+{
+ double xc,yc;
+ int ret=0;
+ xc=c->x;
+ yc=c->y;
+ if (xc >= t->rect[0].x && xc <= t->rect[1].x && yc >= t->rect[1].y && yc <= t->rect[0].y)
+ ret=1;
+ xc-=t->center.x;
+ yc-=t->center.y;
+ yc=-yc;
+ if (t->angle) {
+ int xcn, ycn;
+ xcn=xc*t->cos_val+yc*t->sin_val;
+ ycn=-xc*t->sin_val+yc*t->cos_val;
+ xc=xcn;
+ yc=ycn;
+ }
+ xc=xc*16.0/(double)(t->scale);
+ yc=yc*16.0/(double)(t->scale);
+#if 0
+ {
+ double zc=yc;
+ if (zc < 10 && zc > 10)
+ zc=10;
+ return 0;
+ yc=300;
+ xc/=(-zc+1000.0)/1000.0;
+ yc/=(-zc+1000.0)/1000.0;
+ xc+=t->width/2;
+ }
+#else
+ yc+=t->height/2;
+ xc+=t->width/2;
+#endif
+ if (xc < -0x8000)
+ xc=-0x8000;
+ if (xc > 0x7fff) {
+ xc=0x7fff;
+ }
+ if (yc < -0x8000)
+ yc=-0x8000;
+ if (yc > 0x7fff)
+ yc=0x7fff;
+ p->x=xc;
+ p->y=yc;
+ return ret;
+}
+
+void
+transform_reverse(struct transformation *t, struct point *p, struct coord *c)
+{
+ int xc,yc;
+ xc=p->x;
+ yc=p->y;
+ xc-=t->width/2;
+ yc-=t->height/2;
+ xc=xc*t->scale/16;
+ yc=-yc*t->scale/16;
+ if (t->angle) {
+ int xcn, ycn;
+ xcn=xc*t->cos_val+yc*t->sin_val;
+ ycn=-xc*t->sin_val+yc*t->cos_val;
+ xc=xcn;
+ yc=ycn;
+ }
+ c->x=t->center.x+xc;
+ c->y=t->center.y+yc;
+}
+
+
+static int
+min4(int v1,int v2, int v3, int v4)
+{
+ int res=v1;
+ if (v2 < res)
+ res=v2;
+ if (v3 < res)
+ res=v3;
+ if (v4 < res)
+ res=v4;
+ return res;
+}
+
+static int
+max4(int v1,int v2, int v3, int v4)
+{
+ int res=v1;
+ if (v2 > res)
+ res=v2;
+ if (v3 > res)
+ res=v3;
+ if (v4 > res)
+ res=v4;
+ return res;
+}
+
+void
+transform_set_angle(struct transformation *t,int angle)
+{
+ t->angle=angle;
+ t->cos_val=cos(M_PI*t->angle/180);
+ t->sin_val=sin(M_PI*t->angle/180);
+}
+
+void
+transform_setup(struct transformation *t, int x, int y, int scale, int angle)
+{
+ t->center.x=x;
+ t->center.y=y;
+ t->scale=scale;
+ transform_set_angle(t, angle);
+}
+
+void
+transform_setup_source_rect_limit(struct transformation *t, struct coord *center, int limit)
+{
+ t->center=*center;
+ t->scale=1;
+ t->angle=0;
+ t->rect[0].x=center->x-limit;
+ t->rect[1].x=center->x+limit;
+ t->rect[1].y=center->y-limit;
+ t->rect[0].y=center->y+limit;
+}
+
+void
+transform_setup_source_rect(struct transformation *t)
+{
+ int i;
+ struct coord screen[4];
+ struct point screen_pnt[4];
+
+ screen_pnt[0].x=0;
+ screen_pnt[0].y=0;
+ screen_pnt[1].x=t->width;
+ screen_pnt[1].y=0;
+ screen_pnt[2].x=0;
+ screen_pnt[2].y=t->height;
+ screen_pnt[3].x=t->width;
+ screen_pnt[3].y=t->height;
+ for (i = 0 ; i < 4 ; i++) {
+ transform_reverse(t, &screen_pnt[i], &screen[i]);
+ }
+ t->rect[0].x=min4(screen[0].x,screen[1].x,screen[2].x,screen[3].x);
+ t->rect[1].x=max4(screen[0].x,screen[1].x,screen[2].x,screen[3].x);
+ t->rect[1].y=min4(screen[0].y,screen[1].y,screen[2].y,screen[3].y);
+ t->rect[0].y=max4(screen[0].y,screen[1].y,screen[2].y,screen[3].y);
+}
+
+int
+transform_get_scale(struct transformation *t)
+{
+ return t->scale/16;
+}
+
+void
+transform_lng_lat(struct coord *c, struct coord_geo *g)
+{
+ g->lng=c->x/6371000.0/M_PI*180;
+ g->lat=atan(exp(c->y/6371000.0))/M_PI*360-90;
+#if 0
+ printf("y=%d vs %f\n", c->y, log(tan(M_PI_4+*lat*M_PI/360))*6371020.0);
+#endif
+}
+
+void
+transform_geo_text(struct coord_geo *g, char *buffer)
+{
+ double lng=g->lng;
+ double lat=g->lat;
+ char lng_c='E';
+ char lat_c='N';
+
+ if (lng < 0) {
+ lng=-lng;
+ lng_c='W';
+ }
+ if (lat < 0) {
+ lat=-lat;
+ lat_c='S';
+ }
+
+ sprintf(buffer,"%02.0f%07.4f%c %03.0f%07.4f%c", floor(lat), fmod(lat*60,60), lat_c, floor(lng), fmod(lng*60,60), lng_c);
+
+}
+
+void
+transform_mercator(double *lng, double *lat, struct coord *c)
+{
+ c->x=*lng*6371000.0*M_PI/180;
+ c->y=log(tan(M_PI_4+*lat*M_PI/360))*6371000.0;
+}
+
+double
+transform_scale(int y)
+{
+ struct coord c;
+ struct coord_geo g;
+ c.x=0;
+ c.y=y;
+ transform_lng_lat(&c, &g);
+ return 1/cos(g.lat/180*M_PI);
+}
+
+double
+transform_distance(struct coord *c1, struct coord *c2)
+{
+ double dx,dy,scale=transform_scale((c1->y+c2->y)/2);
+ dx=c1->x-c2->x;
+ dy=c1->y-c2->y;
+ return sqrt(dx*dx+dy*dy)/scale;
+}
+
+int
+transform_distance_sq(struct coord *c1, struct coord *c2)
+{
+ int dx=c1->x-c2->x;
+ int dy=c1->y-c2->y;
+
+ if (dx > 32767 || dy > 32767 || dx < -32767 || dy < -32767)
+ return INT_MAX;
+ else
+ return dx*dx+dy*dy;
+}
+
+int
+transform_distance_line_sq(struct coord *l0, struct coord *l1, struct coord *ref, struct coord *lpnt)
+{
+ int vx,vy,wx,wy;
+ int c1,c2;
+ struct coord l;
+
+ vx=l1->x-l0->x;
+ vy=l1->y-l0->y;
+ wx=ref->x-l0->x;
+ wy=ref->y-l0->y;
+
+ c1=vx*wx+vy*wy;
+ if ( c1 <= 0 ) {
+ if (lpnt)
+ *lpnt=*l0;
+ return transform_distance_sq(l0, ref);
+ }
+ c2=vx*vx+vy*vy;
+ if ( c2 <= c1 ) {
+ if (lpnt)
+ *lpnt=*l1;
+ return transform_distance_sq(l1, ref);
+ }
+
+ l.x=l0->x+vx*c1/c2;
+ l.y=l0->y+vy*c1/c2;
+ if (lpnt)
+ *lpnt=l;
+ return transform_distance_sq(&l, ref);
+}
+
+
+void
+transform_print_deg(double deg)
+{
+ printf("%2.0f:%2.0f:%2.4f", floor(deg), fmod(deg*60,60), fmod(deg*3600,60));
+}
+
+int
+is_visible(struct transformation *t, struct coord *c)
+{
+ struct coord *r=t->rect;
+
+ assert(c[0].x <= c[1].x);
+ assert(c[0].y >= c[1].y);
+ assert(r[0].x <= r[1].x);
+ assert(r[0].y >= r[1].y);
+ if (c[0].x > r[1].x)
+ return 0;
+ if (c[1].x < r[0].x)
+ return 0;
+ if (c[0].y < r[1].y)
+ return 0;
+ if (c[1].y > r[0].y)
+ return 0;
+ return 1;
+}
+
+int
+is_point_visible(struct transformation *t, struct coord *c)
+{
+ struct coord *r=t->rect;
+
+ assert(r[0].x <= r[1].x);
+ assert(r[0].y >= r[1].y);
+ if (c->x > r[1].x)
+ return 0;
+ if (c->x < r[0].x)
+ return 0;
+ if (c->y < r[1].y)
+ return 0;
+ if (c->y > r[0].y)
+ return 0;
+ return 1;
+}
+
+
+int
+is_too_small(struct transformation *t, struct coord *c, int limit)
+{
+ return 0;
+ if ((c[1].x-c[0].x) < limit*t->scale/16) {
+ return 1;
+ }
+ if ((c[0].y-c[1].y) < limit*t->scale/16) {
+ return 1;
+ }
+ return 0;
+}
+
+/*
+Note: there are many mathematically equivalent ways to express these formulas. As usual, not all of them are computationally equivalent.
+
+L = latitude in radians (positive north)
+Lo = longitude in radians (positive east)
+E = easting (meters)
+N = northing (meters)
+
+For the sphere
+
+E = r Lo
+N = r ln [ tan (pi/4 + L/2) ]
+
+where
+
+r = radius of the sphere (meters)
+ln() is the natural logarithm
+
+For the ellipsoid
+
+E = a Lo
+N = a * ln ( tan (pi/4 + L/2) * ( (1 - e * sin (L)) / (1 + e * sin (L))) ** (e/2) )
+
+
+ e
+ -
+ pi L 1 - e sin(L) 2
+ = a ln( tan( ---- + ---) (--------------) )
+ 4 2 1 + e sin(L)
+
+
+where
+
+a = the length of the semi-major axis of the ellipsoid (meters)
+e = the first eccentricity of the ellipsoid
+
+
+*/
diff --git a/transform.h b/transform.h
new file mode 100644
index 00000000..fe0a0f23
--- /dev/null
+++ b/transform.h
@@ -0,0 +1,37 @@
+#ifndef TRANSFORM_H
+#define TRANSFORM_H
+
+#include "point.h"
+
+struct transformation {
+ int width; /* Height of destination rectangle */
+ int height; /* Width of destination rectangle */
+ long scale; /* Scale factor */
+ int angle; /* Rotation angle */
+ double cos_val,sin_val; /* cos and sin of rotation angle */
+ struct coord rect[2]; /* Source rectangle */
+ struct coord center; /* Center of source rectangle */
+};
+
+int transform(struct transformation *t, struct coord *c, struct point *p);
+int is_visible(struct transformation *t, struct coord *c);
+int is_too_small(struct transformation *t, struct coord *c, int limit);
+void transform_lng_lat(struct coord *c, struct coord_geo *g);
+void transform_reverse(struct transformation *t, struct point *p, struct coord *c);
+void transform_print_deg(double deg);
+double transform_scale(int y);
+double transform_distance(struct coord *c1, struct coord *c2);
+int transform_distance_sq(struct coord *c1, struct coord *c2);
+int transform_distance_line_sq(struct coord *l0, struct coord *l1, struct coord *ref, struct coord *lpnt);
+
+void transform_mercator(double *lng, double *lat, struct coord *c);
+int is_point_visible(struct transformation *t, struct coord *c);
+int transform_get_scale(struct transformation *t);
+void transform_setup_source_rect(struct transformation *t);
+void transform_set_angle(struct transformation *t,int angle);
+void transform_setup(struct transformation *t, int x, int y, int scale, int angle);
+void transform_setup_source_rect_limit(struct transformation *t, struct coord *center, int limit);
+void transform_geo_text(struct coord_geo *g, char *buffer);
+
+
+#endif
diff --git a/tree.c b/tree.c
new file mode 100644
index 00000000..9aacfacc
--- /dev/null
+++ b/tree.c
@@ -0,0 +1,320 @@
+#include <stdio.h>
+#include <string.h>
+#include "file.h"
+#include "map_data.h"
+#include "data.h"
+#include "tree.h"
+
+struct tree_hdr {
+ unsigned int addr;
+ unsigned int size;
+ unsigned int low;
+};
+
+struct tree_hdr_h {
+ unsigned int addr;
+ unsigned int size;
+};
+
+struct tree_leaf_h {
+ unsigned int lower;
+ unsigned int higher;
+ unsigned int match;
+ unsigned int value;
+};
+
+struct tree_hdr_v {
+ unsigned int count;
+ unsigned int next;
+ unsigned int unknown;
+};
+
+struct tree_leaf_v {
+ unsigned char key;
+ int value;
+} __attribute__((packed));
+
+int
+tree_compare_string(unsigned char *s1, unsigned char **s2_ptr)
+{
+ unsigned char *s2=*s2_ptr;
+ char s1_exp, s2_exp;
+ *s2_ptr+=strlen(s2)+1;
+ for (;;) {
+ s1_exp=*s1++;
+ s2_exp=*s2++;
+ if (! s1_exp && ! s2_exp)
+ return 0;
+ if (s1_exp == 'A' && *s1 == 'E') { s1_exp='Ä'; s1++; }
+ if (s1_exp == 'O' && *s1 == 'E') { s1_exp='Ö'; s1++; }
+ if (s1_exp == 'U' && *s1 == 'E') { s1_exp='Ü'; s1++; }
+ if (s2_exp == 'A' && *s2 == 'E') { s2_exp='Ä'; s2++; }
+ if (s2_exp == 'O' && *s2 == 'E') { s2_exp='Ö'; s2++; }
+ if (s2_exp == 'U' && *s2 == 'E') { s2_exp='Ü'; s2++; }
+ if (s1_exp > s2_exp)
+ return 2;
+ if (s1_exp < s2_exp)
+ return -2;
+ }
+}
+
+int
+tree_compare_string_partial(unsigned char *s1, unsigned char **s2_ptr)
+{
+ unsigned char *s2=*s2_ptr;
+ char s1_exp, s2_exp;
+ *s2_ptr+=strlen(s2)+1;
+ for (;;) {
+ s1_exp=*s1++;
+ s2_exp=*s2++;
+ if (! s1_exp && ! s2_exp)
+ return 0;
+ if (s1_exp == 'A' && *s1 == 'E') { s1_exp='Ä'; s1++; }
+ if (s1_exp == 'O' && *s1 == 'E') { s1_exp='Ö'; s1++; }
+ if (s1_exp == 'U' && *s1 == 'E') { s1_exp='Ü'; s1++; }
+ if (s2_exp == 'A' && *s2 == 'E') { s2_exp='Ä'; s2++; }
+ if (s2_exp == 'O' && *s2 == 'E') { s2_exp='Ö'; s2++; }
+ if (s2_exp == 'U' && *s2 == 'E') { s2_exp='Ü'; s2++; }
+ if (! s1_exp)
+ return -1;
+ if (s1_exp > s2_exp)
+ return 2;
+ if (s1_exp < s2_exp)
+ return -2;
+ }
+}
+
+
+int
+tree_search_h(struct file *file, unsigned int search)
+{
+ unsigned char *p=file->begin,*end;
+ int last,i=0,debug=0;
+ struct tree_hdr_h *thdr;
+ struct tree_leaf_h *tleaf;
+
+ if (debug) {
+ printf("tree_search_h\n");
+ }
+ while (i++ < 1000) {
+ thdr=(struct tree_hdr_h *)p;
+ p+=sizeof(*thdr);
+ end=p+thdr->size;
+ if (debug) {
+ printf("@0x%x\n", p-file->begin);
+ }
+ last=0;
+ while (p < end) {
+ tleaf=(struct tree_leaf_h *)p;
+ p+=sizeof(*tleaf);
+ if (debug) {
+ printf("low:0x%x high:0x%x match:0x%x val:0x%x search:0x%x\n", tleaf->lower, tleaf->higher, tleaf->match, tleaf->value, search);
+ }
+ if (tleaf->value == search)
+ return tleaf->match;
+ if (tleaf->value > search) {
+ if (tleaf->lower)
+ last=tleaf->lower;
+ break;
+ }
+ last=tleaf->higher;
+ }
+ if (! last || last == -1)
+ return 0;
+ p=file->begin+last;
+ }
+ return 0;
+}
+
+int
+tree_search_v(struct file *file, int offset, int search)
+{
+ unsigned char *p=file->begin+offset;
+ int i=0,count,debug=0;
+ struct tree_hdr_v *thdr;
+ struct tree_leaf_v *tleaf;
+ while (i++ < 1000) {
+ thdr=(struct tree_hdr_v *)p;
+ p+=sizeof(*thdr);
+ count=thdr->count;
+ while (count--) {
+ tleaf=(struct tree_leaf_v *)p;
+ p+=sizeof(*tleaf);
+ if (debug)
+ printf("tree_search_v: 0x%x 0x%x\n", tleaf->key, search);
+ if (tleaf->key == search)
+ return tleaf->value;
+ }
+ if (! thdr->next)
+ break;
+ p=file->begin+thdr->next;
+ }
+ return 0;
+
+}
+
+/* return values */
+/* 0=Next */
+/* -2=Too low */
+/* 1=Abort */
+/* 2=Too high */
+
+int
+tree_search(int version, struct file *file, unsigned char *p, int (*tree_func)(int version, int leaf, unsigned char **, struct map_data *mdat, void *), struct map_data *mdat, void *data, int higher)
+{
+ unsigned char *end,*psav;
+ struct tree_hdr *thdr;
+ int res=1,low;
+ int high;
+ int debug=0;
+ int leaf=0;
+ int retry=0;
+
+ if (debug)
+ printf("version %d\n", version);
+
+ thdr=(struct tree_hdr *)p;
+ p+=sizeof(*thdr);
+ low=thdr->low;
+ end=p+thdr->size;
+ if (debug)
+ printf("Header: offset 0x%x size %d low 0x%x\n", thdr->addr, thdr->size, thdr->low);
+ if (higher == -1)
+ leaf=-1;
+ if (higher == 1 && low != -1) {
+ if (debug)
+ printf("calling first higher tree 0x%x\n",low);
+ res=tree_search(version,file,low+file->begin,tree_func,mdat,data,1);
+ if (debug)
+ printf("returning from first higher tree res=%d\n", res);
+ }
+ while (p < end) {
+ psav=p;
+ high=get_long(&p);
+ if (high == -1)
+ leaf=1;
+ res=tree_func(version, leaf, &p, mdat, data);
+ leaf=0;
+ if (debug)
+ printf("result: %d high 0x%x\n", res, high);
+ if (res == 1)
+ return res;
+ if (res < 0) {
+ if (debug)
+ printf("calling lower tree 0x%x\n",low);
+ if (low != -1) {
+ res=tree_search(version,file,low+file->begin,tree_func,mdat,data,0);
+ if (debug)
+ printf("returning from lower tree res=%d\n", res);
+ if (! res && !retry++ ) {
+ if (debug)
+ printf("retrying current leaf\n");
+ p=psav;
+ continue;
+ }
+ low=-1;
+ if (res < 0)
+ break;
+ }
+ else
+ break;
+ }
+ retry=0;
+ if (! res && high != -1) {
+ if (debug)
+ printf("high=0x%x\n", high);
+ if (debug)
+ printf("calling higher tree 0x%x\n",high);
+ res=tree_search(version,file,high+file->begin,tree_func,mdat,data,1);
+ if (debug)
+ printf("returning from higer tree res=%d\n", res);
+ low=-1;
+ } else {
+ low=high;
+ }
+ }
+ if (low != -1)
+ res=tree_search(version,file,low+file->begin,tree_func,mdat,data,0);
+
+ return res;
+}
+
+int
+tree_search_map(struct map_data *mdat, int map, char *ext,
+ int (*tree_func)(int, int, unsigned char **, struct map_data *mdat, void *), void *data)
+
+{
+ struct file *f_dat,*f_idx;
+ char filename[4096];
+ int len, version, ret;
+ unsigned char *p;
+ int debug=0;
+
+ while (mdat) {
+ f_dat=mdat->file[map];
+ strcpy(filename, f_dat->name);
+ len=strlen(filename);
+ strcpy(filename+len-3,ext);
+ if (debug)
+ printf("tree_search_map: filename='%s'\n", filename);
+ f_idx=file_create(filename);
+ version=1;
+ p=f_idx->begin;
+ if (!strncmp(p+4,"RootBlock",9)) {
+ p+=0x1000;
+ version=2;
+ }
+ ret=tree_search(version, f_idx, p, tree_func, mdat, data, -1);
+ if (debug)
+ printf("tree_search_map: ret=%d\n", ret);
+ file_destroy(f_idx);
+ if (ret == 1)
+ return 1;
+ mdat=mdat->next;
+ }
+ return 0;
+}
+
+struct tree_search_hv {
+ struct map_data *mdat;
+ struct file *f_idx_h;
+ struct file *f_idx_v;
+ struct tree_search_hv *next;
+};
+
+int
+tree_search_hv_map(struct map_data *mdat, int map, unsigned int search1, unsigned int search2, int *result, struct map_data **mdat_result)
+
+{
+ struct file *f_dat,*f_idx_h, *f_idx_v;
+ char filename[4096];
+ int h,len,ret=0;
+ int debug=0;
+
+ while (mdat && !ret) {
+ f_dat=mdat->file[map];
+ strcpy(filename, f_dat->name);
+ len=strlen(filename);
+ strcpy(filename+len-3,"h1");
+ f_idx_h=file_create(filename);
+ strcpy(filename+len-3,"v1");
+ f_idx_v=file_create(filename);
+ h=tree_search_h(f_idx_h, search1);
+ if (h) {
+ ret=tree_search_v(f_idx_v, h, search2);
+ if (ret) {
+ if (debug)
+ printf("result 0x%x\n", ret);
+ *result=ret;
+ *mdat_result=mdat;
+ file_destroy(f_idx_v);
+ file_destroy(f_idx_h);
+ return 0;
+ }
+ }
+ file_destroy(f_idx_v);
+ file_destroy(f_idx_h);
+ mdat=mdat->next;
+ }
+ return 1;
+}
diff --git a/tree.h b/tree.h
new file mode 100644
index 00000000..58ff0448
--- /dev/null
+++ b/tree.h
@@ -0,0 +1,13 @@
+struct block_offset {
+ unsigned short offset;
+ unsigned short block;
+};
+
+
+int tree_compare_string(unsigned char *s1, unsigned char **s2);
+int tree_compare_string_partial(unsigned char *s1, unsigned char **s2);
+#if 0
+int tree_search(struct file *file, unsigned char *search, int (*tree_func)(int, unsigned char *, unsigned char **, struct map_data *, void *), struct map_data *mdat, void *data2);
+#endif
+int tree_search_map(struct map_data *mdat, int map, char *ext, int (*tree_func)(int, int, unsigned char **, struct map_data *, void *), void *data);
+int tree_search_hv_map(struct map_data *mdat, int map, unsigned int search1, unsigned int search2, int *result, struct map_data **mdat_result);
diff --git a/tst.c b/tst.c
new file mode 100644
index 00000000..16cd8834
--- /dev/null
+++ b/tst.c
@@ -0,0 +1,15 @@
+#include <glib/gmacros.h>
+#include <glib/gtypes.h>
+#include <glib.h>
+
+int tst(void)
+{
+ unsigned short t1=20;
+ unsigned short t2=10;
+ return t2-t1;
+}
+
+int main(int argc, char **argv)
+{
+ printf("res=%d\n", tst());
+}
diff --git a/util.c b/util.c
new file mode 100644
index 00000000..b99dfcbd
--- /dev/null
+++ b/util.c
@@ -0,0 +1,18 @@
+#include <ctype.h>
+
+void
+strtoupper(unsigned char *dest, unsigned char *src)
+{
+ while (*src)
+ *dest++=toupper(*src++);
+ *dest='\0';
+}
+
+void
+strtolower(unsigned char *dest, unsigned char *src)
+{
+ while (*src)
+ *dest++=tolower(*src++);
+ *dest='\0';
+}
+
diff --git a/util.h b/util.h
new file mode 100644
index 00000000..5f89adb9
--- /dev/null
+++ b/util.h
@@ -0,0 +1,4 @@
+#include <ctype.h>
+
+void strtoupper(unsigned char *dest, unsigned char *src);
+void strtolower(unsigned char *dest, unsigned char *src);
diff --git a/vehicle.c b/vehicle.c
new file mode 100644
index 00000000..80eda88c
--- /dev/null
+++ b/vehicle.c
@@ -0,0 +1,216 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <math.h>
+#include <glib.h>
+#include "coord.h"
+#include "transform.h"
+#include "statusbar.h"
+#include "vehicle.h"
+
+struct vehicle {
+ GIOChannel *iochan;
+ int timer_count;
+ int qual;
+ int sats;
+ double lat,lng;
+ double height;
+ double dir,speed;
+ struct coord current_pos;
+ struct coord_d curr;
+ struct coord_d delta;
+
+ double speed_last;
+};
+
+void (*callback_func)();
+void *callback_data;
+
+int
+vehicle_timer(gpointer t)
+{
+ struct vehicle *this=t;
+ if (this->timer_count++ < 10) {
+ this->curr.x+=this->delta.x;
+ this->curr.y+=this->delta.y;
+ this->current_pos.x=this->curr.x;
+ this->current_pos.y=this->curr.y;
+ if (callback_func)
+ (*callback_func)(callback_data);
+ }
+ return TRUE;
+}
+
+struct coord *
+vehicle_pos_get(void *t)
+{
+ struct vehicle *this=t;
+
+ return &this->current_pos;
+}
+
+double *
+vehicle_speed_get(void *t)
+{
+ struct vehicle *this=t;
+
+ return &this->speed;
+}
+
+double *
+vehicle_dir_get(void *t)
+{
+ struct vehicle *this=t;
+
+ return &this->dir;
+}
+
+void
+vehicle_set_position(void *t, struct coord *pos)
+{
+ struct vehicle *this=t;
+
+ this->current_pos=*pos;
+ this->curr.x=this->current_pos.x;
+ this->curr.y=this->current_pos.y;
+ this->delta.x=0;
+ this->delta.y=0;
+ if (callback_func)
+ (*callback_func)(callback_data);
+}
+
+void
+vehicle_parse_gps(struct vehicle *this, char *buffer)
+{
+ char *p,*item[16];
+ double lat,lng,scale,speed;
+ int i,debug=0;
+
+ if (debug) {
+ printf("GPS %s\n", buffer);
+ }
+ if (!strncmp(buffer,"$GPGGA",6)) {
+ /* $GPGGA,184424.505,4924.2811,N,01107.8846,E,1,05,2.5,408.6,M,,,,0000*0C
+ UTC of Fix,Latitude,N/S,Longitude,E/W,Quality,Satelites,HDOP,Altitude,"M"
+ */
+ i=0;
+ p=buffer;
+ while (i < 16) {
+ item[i++]=p;
+ while (*p && *p != ',')
+ p++;
+ if (! *p) break;
+ *p++='\0';
+ }
+
+ sscanf(item[2],"%lf",&lat);
+ this->lat=floor(lat/100);
+ lat-=this->lat*100;
+ this->lat+=lat/60;
+
+ sscanf(item[4],"%lf",&lng);
+ this->lng=floor(lng/100);
+ lng-=this->lng*100;
+ this->lng+=lng/60;
+
+ sscanf(item[6],"%d",&this->qual);
+ sscanf(item[7],"%d",&this->sats);
+ sscanf(item[9],"%lf",&this->height);
+
+ transform_mercator(&this->lng, &this->lat, &this->current_pos);
+
+ this->curr.x=this->current_pos.x;
+ this->curr.y=this->current_pos.y;
+ this->timer_count=0;
+ if (callback_func)
+ (*callback_func)(callback_data);
+ }
+ if (!strncmp(buffer,"$GPVTG",6)) {
+ /* $GPVTG,143.58,T,,M,0.26,N,0.5,K*6A
+ Course Over Ground Degrees True,"T",Course Over Ground Degrees Magnetic,"M",
+ Speed in Knots,"N","Speed in KM/H","K",*CHECKSUM */
+
+ i=0;
+ p=buffer;
+ while (i < 16) {
+ item[i++]=p;
+ while (*p && *p != ',')
+ p++;
+ if (! *p) break;
+ *p++='\0';
+ }
+ sscanf(item[1],"%lf",&this->dir);
+ sscanf(item[7],"%lf",&this->speed);
+
+ scale=transform_scale(this->current_pos.y);
+ speed=this->speed+(this->speed-this->speed_last)/2;
+ this->delta.x=sin(M_PI*this->dir/180)*speed*scale/36;
+ this->delta.y=cos(M_PI*this->dir/180)*speed*scale/36;
+ this->speed_last=this->speed;
+ }
+}
+
+gboolean
+vehicle_track(GIOChannel *iochan, GIOCondition condition, gpointer t)
+{
+ struct vehicle *this=t;
+ GError *error=NULL;
+ char buffer[4096];
+ char *str,*tok;
+ int size;
+
+ if (condition == G_IO_IN) {
+ g_io_channel_read_chars(iochan, buffer, 4096, &size, &error);
+ buffer[size]='\0';
+ str=buffer;
+ while ((tok=strtok(str, "\n"))) {
+ str=NULL;
+ vehicle_parse_gps(this, tok);
+ }
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void *
+vehicle_new(char *file)
+{
+ struct vehicle *this;
+ GError *error=NULL;
+ int fd;
+
+ this=g_new(struct vehicle,1);
+ fd=open(file,O_RDONLY|O_NDELAY);
+ this->iochan=g_io_channel_unix_new(fd);
+ g_io_channel_set_encoding(this->iochan, NULL, &error);
+ g_io_add_watch(this->iochan, G_IO_IN|G_IO_ERR|G_IO_HUP, vehicle_track, this);
+#if 0
+ g_timeout_add(100, vehicle_timer, this);
+#endif
+ this->current_pos.x=0x130000;
+ this->current_pos.y=0x600000;
+
+ return this;
+}
+
+void
+vehicle_callback(void (*func)(), void *data)
+{
+ callback_func=func;
+ callback_data=data;
+}
+
+int
+vehicle_destroy(void *t)
+{
+ struct vehicle *this=t;
+ GError *error=NULL;
+
+
+ g_io_channel_shutdown(this->iochan,0,&error);
+ g_free(this);
+
+ return 0;
+}
diff --git a/vehicle.h b/vehicle.h
new file mode 100644
index 00000000..10101c24
--- /dev/null
+++ b/vehicle.h
@@ -0,0 +1,6 @@
+struct coord *vehicle_pos_get(void *);
+double *vehicle_dir_get(void *);
+double *vehicle_speed_get(void *);
+void vehicle_callback(void (*func)(),void *data);
+void vehicle_set_position(void *, struct coord *);
+void *vehicle_new(char *file);