Description: Include auto-generated files.
Include the files generated by running "debian/rules new-upstream".
.
This avoids a few build-dependencies and makes the build process slightly
faster.
--- a/Makefile
+++ b/Makefile
@@ -54,9 +54,9 @@
DESTDIR = /usr/local/
BINDIR = bin
# The man pages go into $(DESTDIR)$(MANDIR)
-MANDIR = man/man1
-# and the appropriate suffix is 1
-MANSUFFIX = 1
+MANDIR = man/man6
+# and the appropriate suffix is 6
+MANSUFFIX = 6
### End of local configuration.
@@ -155,7 +155,7 @@
# Not Windows. If gtk+ is properly installed, this is all that's needed.
ifdef Gtk
EXTRA_INCLUDES=`pkg-config --cflags gtk+-$(Gtk)`
-GUILIBS=`pkg-config --libs gtk+-$(Gtk)`
+GUILIBS=-lgtk-x11-2.0 -lgdk-x11-2.0 -lgobject-2.0 -lglib-2.0 -lm
else
EXTRA_INCLUDES=`gtk-config --cflags`
GUILIBS=`gtk-config --libs`
@@ -502,1419 +502,14 @@
protocol.h cmsg_union.h pmsg_union.h protocol-enums.h game-enums.h \
sysdep.h game-enums.c
sysdep.o: sysdep.c sysdep.h
-gui.o: gui.c gui.h /usr/include/gtk-2.0/gtk/gtk.h \
- /usr/include/gtk-2.0/gdk/gdk.h \
- /usr/include/gtk-2.0/gdk/gdkapplaunchcontext.h \
- /usr/include/glib-2.0/gio/gio.h /usr/include/glib-2.0/gio/giotypes.h \
- /usr/include/glib-2.0/gio/gioenums.h /usr/include/glib-2.0/glib-object.h \
- /usr/include/glib-2.0/gobject/gbinding.h /usr/include/glib-2.0/glib.h \
- /usr/include/glib-2.0/glib/galloca.h /usr/include/glib-2.0/glib/gtypes.h \
- /usr/lib/glib-2.0/include/glibconfig.h \
- /usr/include/glib-2.0/glib/gmacros.h /usr/include/glib-2.0/glib/garray.h \
- /usr/include/glib-2.0/glib/gasyncqueue.h \
- /usr/include/glib-2.0/glib/gthread.h /usr/include/glib-2.0/glib/gerror.h \
- /usr/include/glib-2.0/glib/gquark.h /usr/include/glib-2.0/glib/gutils.h \
- /usr/include/glib-2.0/glib/gatomic.h \
- /usr/include/glib-2.0/glib/gbacktrace.h \
- /usr/include/glib-2.0/glib/gbase64.h \
- /usr/include/glib-2.0/glib/gbitlock.h \
- /usr/include/glib-2.0/glib/gbookmarkfile.h \
- /usr/include/glib-2.0/glib/gcache.h /usr/include/glib-2.0/glib/glist.h \
- /usr/include/glib-2.0/glib/gmem.h /usr/include/glib-2.0/glib/gslice.h \
- /usr/include/glib-2.0/glib/gchecksum.h \
- /usr/include/glib-2.0/glib/gcompletion.h \
- /usr/include/glib-2.0/glib/gconvert.h \
- /usr/include/glib-2.0/glib/gdataset.h /usr/include/glib-2.0/glib/gdate.h \
- /usr/include/glib-2.0/glib/gdatetime.h \
- /usr/include/glib-2.0/glib/gtimezone.h /usr/include/glib-2.0/glib/gdir.h \
- /usr/include/glib-2.0/glib/gfileutils.h \
- /usr/include/glib-2.0/glib/ghash.h /usr/include/glib-2.0/glib/ghook.h \
- /usr/include/glib-2.0/glib/ghostutils.h \
- /usr/include/glib-2.0/glib/giochannel.h \
- /usr/include/glib-2.0/glib/gmain.h /usr/include/glib-2.0/glib/gpoll.h \
- /usr/include/glib-2.0/glib/gslist.h /usr/include/glib-2.0/glib/gstring.h \
- /usr/include/glib-2.0/glib/gunicode.h \
- /usr/include/glib-2.0/glib/gkeyfile.h \
- /usr/include/glib-2.0/glib/gmappedfile.h \
- /usr/include/glib-2.0/glib/gmarkup.h \
- /usr/include/glib-2.0/glib/gmessages.h \
- /usr/include/glib-2.0/glib/gnode.h /usr/include/glib-2.0/glib/goption.h \
- /usr/include/glib-2.0/glib/gpattern.h \
- /usr/include/glib-2.0/glib/gprimes.h /usr/include/glib-2.0/glib/gqsort.h \
- /usr/include/glib-2.0/glib/gqueue.h /usr/include/glib-2.0/glib/grand.h \
- /usr/include/glib-2.0/glib/grel.h /usr/include/glib-2.0/glib/gregex.h \
- /usr/include/glib-2.0/glib/gscanner.h \
- /usr/include/glib-2.0/glib/gsequence.h \
- /usr/include/glib-2.0/glib/gshell.h /usr/include/glib-2.0/glib/gspawn.h \
- /usr/include/glib-2.0/glib/gstrfuncs.h \
- /usr/include/glib-2.0/glib/gtestutils.h \
- /usr/include/glib-2.0/glib/gthreadpool.h \
- /usr/include/glib-2.0/glib/gtimer.h /usr/include/glib-2.0/glib/gtree.h \
- /usr/include/glib-2.0/glib/gurifuncs.h \
- /usr/include/glib-2.0/glib/gvarianttype.h \
- /usr/include/glib-2.0/glib/gvariant.h \
- /usr/include/glib-2.0/gobject/gobject.h \
- /usr/include/glib-2.0/gobject/gtype.h \
- /usr/include/glib-2.0/gobject/gvalue.h \
- /usr/include/glib-2.0/gobject/gparam.h \
- /usr/include/glib-2.0/gobject/gclosure.h \
- /usr/include/glib-2.0/gobject/gsignal.h \
- /usr/include/glib-2.0/gobject/gmarshal.h \
- /usr/include/glib-2.0/gobject/gboxed.h \
- /usr/include/glib-2.0/gobject/genums.h \
- /usr/include/glib-2.0/gobject/gparamspecs.h \
- /usr/include/glib-2.0/gobject/gsourceclosure.h \
- /usr/include/glib-2.0/gobject/gtypemodule.h \
- /usr/include/glib-2.0/gobject/gtypeplugin.h \
- /usr/include/glib-2.0/gobject/gvaluearray.h \
- /usr/include/glib-2.0/gobject/gvaluetypes.h \
- /usr/include/glib-2.0/gio/gappinfo.h /usr/include/glib-2.0/gio/gaction.h \
- /usr/include/glib-2.0/gio/gsimpleaction.h \
- /usr/include/glib-2.0/gio/gactiongroup.h \
- /usr/include/glib-2.0/gio/gsimpleactiongroup.h \
- /usr/include/glib-2.0/gio/gactiongroup.h \
- /usr/include/glib-2.0/gio/gapplication.h \
- /usr/include/glib-2.0/gio/gapplicationcommandline.h \
- /usr/include/glib-2.0/gio/gasyncinitable.h \
- /usr/include/glib-2.0/gio/ginitable.h \
- /usr/include/glib-2.0/gio/gasyncresult.h \
- /usr/include/glib-2.0/gio/gbufferedinputstream.h \
- /usr/include/glib-2.0/gio/gfilterinputstream.h \
- /usr/include/glib-2.0/gio/ginputstream.h \
- /usr/include/glib-2.0/gio/gbufferedoutputstream.h \
- /usr/include/glib-2.0/gio/gfilteroutputstream.h \
- /usr/include/glib-2.0/gio/goutputstream.h \
- /usr/include/glib-2.0/gio/gcancellable.h \
- /usr/include/glib-2.0/gio/gcharsetconverter.h \
- /usr/include/glib-2.0/gio/gconverter.h \
- /usr/include/glib-2.0/gio/gcontenttype.h \
- /usr/include/glib-2.0/gio/gconverterinputstream.h \
- /usr/include/glib-2.0/gio/gconverteroutputstream.h \
- /usr/include/glib-2.0/gio/gcredentials.h \
- /usr/include/glib-2.0/gio/gdatainputstream.h \
- /usr/include/glib-2.0/gio/gdataoutputstream.h \
- /usr/include/glib-2.0/gio/gdbusaddress.h \
- /usr/include/glib-2.0/gio/gdbusauthobserver.h \
- /usr/include/glib-2.0/gio/gdbusconnection.h \
- /usr/include/glib-2.0/gio/gdbuserror.h \
- /usr/include/glib-2.0/gio/gdbusintrospection.h \
- /usr/include/glib-2.0/gio/gdbusmessage.h \
- /usr/include/glib-2.0/gio/gdbusmethodinvocation.h \
- /usr/include/glib-2.0/gio/gdbusnameowning.h \
- /usr/include/glib-2.0/gio/gdbusnamewatching.h \
- /usr/include/glib-2.0/gio/gdbusproxy.h \
- /usr/include/glib-2.0/gio/gdbusserver.h \
- /usr/include/glib-2.0/gio/gdbusutils.h \
- /usr/include/glib-2.0/gio/gdrive.h \
- /usr/include/glib-2.0/gio/gemblemedicon.h \
- /usr/include/glib-2.0/gio/gicon.h /usr/include/glib-2.0/gio/gemblem.h \
- /usr/include/glib-2.0/gio/gfileattribute.h \
- /usr/include/glib-2.0/gio/gfileenumerator.h \
- /usr/include/glib-2.0/gio/gfile.h /usr/include/glib-2.0/gio/gfileicon.h \
- /usr/include/glib-2.0/gio/gfileinfo.h \
- /usr/include/glib-2.0/gio/gfileinputstream.h \
- /usr/include/glib-2.0/gio/gfileiostream.h \
- /usr/include/glib-2.0/gio/giostream.h \
- /usr/include/glib-2.0/gio/gioerror.h \
- /usr/include/glib-2.0/gio/gfilemonitor.h \
- /usr/include/glib-2.0/gio/gfilenamecompleter.h \
- /usr/include/glib-2.0/gio/gfileoutputstream.h \
- /usr/include/glib-2.0/gio/ginetaddress.h \
- /usr/include/glib-2.0/gio/ginetsocketaddress.h \
- /usr/include/glib-2.0/gio/gsocketaddress.h \
- /usr/include/glib-2.0/gio/gioenumtypes.h \
- /usr/include/glib-2.0/gio/giomodule.h /usr/include/glib-2.0/gmodule.h \
- /usr/include/glib-2.0/gio/gioscheduler.h \
- /usr/include/glib-2.0/gio/gloadableicon.h \
- /usr/include/glib-2.0/gio/gmemoryinputstream.h \
- /usr/include/glib-2.0/gio/gmemoryoutputstream.h \
- /usr/include/glib-2.0/gio/gmount.h \
- /usr/include/glib-2.0/gio/gmountoperation.h \
- /usr/include/glib-2.0/gio/gnativevolumemonitor.h \
- /usr/include/glib-2.0/gio/gvolumemonitor.h \
- /usr/include/glib-2.0/gio/gnetworkaddress.h \
- /usr/include/glib-2.0/gio/gnetworkservice.h \
- /usr/include/glib-2.0/gio/gpermission.h \
- /usr/include/glib-2.0/gio/gpollableinputstream.h \
- /usr/include/glib-2.0/gio/gpollableoutputstream.h \
- /usr/include/glib-2.0/gio/gproxy.h \
- /usr/include/glib-2.0/gio/gproxyaddress.h \
- /usr/include/glib-2.0/gio/gproxyaddressenumerator.h \
- /usr/include/glib-2.0/gio/gsocketaddressenumerator.h \
- /usr/include/glib-2.0/gio/gproxyresolver.h \
- /usr/include/glib-2.0/gio/gresolver.h \
- /usr/include/glib-2.0/gio/gseekable.h \
- /usr/include/glib-2.0/gio/gsettings.h \
- /usr/include/glib-2.0/gio/gsimpleasyncresult.h \
- /usr/include/glib-2.0/gio/gsimplepermission.h \
- /usr/include/glib-2.0/gio/gsocketclient.h \
- /usr/include/glib-2.0/gio/gsocketconnectable.h \
- /usr/include/glib-2.0/gio/gsocketconnection.h \
- /usr/include/glib-2.0/gio/gsocket.h \
- /usr/include/glib-2.0/gio/gsocketcontrolmessage.h \
- /usr/include/glib-2.0/gio/gsocketlistener.h \
- /usr/include/glib-2.0/gio/gsocketservice.h \
- /usr/include/glib-2.0/gio/gsrvtarget.h \
- /usr/include/glib-2.0/gio/gtcpconnection.h \
- /usr/include/glib-2.0/gio/gtcpwrapperconnection.h \
- /usr/include/glib-2.0/gio/gthemedicon.h \
- /usr/include/glib-2.0/gio/gthreadedsocketservice.h \
- /usr/include/glib-2.0/gio/gtlsbackend.h \
- /usr/include/glib-2.0/gio/gtlscertificate.h \
- /usr/include/glib-2.0/gio/gtlsclientconnection.h \
- /usr/include/glib-2.0/gio/gtlsconnection.h \
- /usr/include/glib-2.0/gio/gtlsserverconnection.h \
- /usr/include/glib-2.0/gio/gvfs.h /usr/include/glib-2.0/gio/gvolume.h \
- /usr/include/glib-2.0/gio/gzlibcompressor.h \
- /usr/include/glib-2.0/gio/gzlibdecompressor.h \
- /usr/include/gtk-2.0/gdk/gdkscreen.h /usr/include/cairo/cairo.h \
- /usr/include/cairo/cairo-version.h /usr/include/cairo/cairo-features.h \
- /usr/include/cairo/cairo-deprecated.h \
- /usr/include/gtk-2.0/gdk/gdktypes.h /usr/include/pango-1.0/pango/pango.h \
- /usr/include/pango-1.0/pango/pango-attributes.h \
- /usr/include/pango-1.0/pango/pango-font.h \
- /usr/include/pango-1.0/pango/pango-coverage.h \
- /usr/include/pango-1.0/pango/pango-types.h \
- /usr/include/pango-1.0/pango/pango-gravity.h \
- /usr/include/pango-1.0/pango/pango-matrix.h \
- /usr/include/pango-1.0/pango/pango-script.h \
- /usr/include/pango-1.0/pango/pango-language.h \
- /usr/include/pango-1.0/pango/pango-bidi-type.h \
- /usr/include/pango-1.0/pango/pango-break.h \
- /usr/include/pango-1.0/pango/pango-item.h \
- /usr/include/pango-1.0/pango/pango-context.h \
- /usr/include/pango-1.0/pango/pango-fontmap.h \
- /usr/include/pango-1.0/pango/pango-fontset.h \
- /usr/include/pango-1.0/pango/pango-engine.h \
- /usr/include/pango-1.0/pango/pango-glyph.h \
- /usr/include/pango-1.0/pango/pango-enum-types.h \
- /usr/include/pango-1.0/pango/pango-features.h \
- /usr/include/pango-1.0/pango/pango-glyph-item.h \
- /usr/include/pango-1.0/pango/pango-layout.h \
- /usr/include/pango-1.0/pango/pango-tabs.h \
- /usr/include/pango-1.0/pango/pango-renderer.h \
- /usr/include/pango-1.0/pango/pango-utils.h \
- /usr/lib/gtk-2.0/include/gdkconfig.h \
- /usr/include/gtk-2.0/gdk/gdkdisplay.h \
- /usr/include/gtk-2.0/gdk/gdkevents.h /usr/include/gtk-2.0/gdk/gdkcolor.h \
- /usr/include/gtk-2.0/gdk/gdkdnd.h /usr/include/gtk-2.0/gdk/gdkinput.h \
- /usr/include/gtk-2.0/gdk/gdkcairo.h /usr/include/gtk-2.0/gdk/gdkpixbuf.h \
- /usr/include/gtk-2.0/gdk/gdkrgb.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-features.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-core.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-transform.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-animation.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-simple-anim.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-io.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-loader.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-enum-types.h \
- /usr/include/pango-1.0/pango/pangocairo.h \
- /usr/include/gtk-2.0/gdk/gdkcursor.h \
- /usr/include/gtk-2.0/gdk/gdkdisplaymanager.h \
- /usr/include/gtk-2.0/gdk/gdkdrawable.h /usr/include/gtk-2.0/gdk/gdkgc.h \
- /usr/include/gtk-2.0/gdk/gdkenumtypes.h \
- /usr/include/gtk-2.0/gdk/gdkfont.h /usr/include/gtk-2.0/gdk/gdkimage.h \
- /usr/include/gtk-2.0/gdk/gdkkeys.h /usr/include/gtk-2.0/gdk/gdkpango.h \
- /usr/include/gtk-2.0/gdk/gdkpixmap.h \
- /usr/include/gtk-2.0/gdk/gdkproperty.h \
- /usr/include/gtk-2.0/gdk/gdkregion.h \
- /usr/include/gtk-2.0/gdk/gdkselection.h \
- /usr/include/gtk-2.0/gdk/gdkspawn.h \
- /usr/include/gtk-2.0/gdk/gdktestutils.h \
- /usr/include/gtk-2.0/gdk/gdkwindow.h \
- /usr/include/gtk-2.0/gdk/gdkvisual.h \
- /usr/include/gtk-2.0/gtk/gtkaboutdialog.h \
- /usr/include/gtk-2.0/gtk/gtkdialog.h \
- /usr/include/gtk-2.0/gtk/gtkwindow.h \
- /usr/include/gtk-2.0/gtk/gtkaccelgroup.h \
- /usr/include/gtk-2.0/gtk/gtkenums.h /usr/include/gtk-2.0/gtk/gtkbin.h \
- /usr/include/gtk-2.0/gtk/gtkcontainer.h \
- /usr/include/gtk-2.0/gtk/gtkwidget.h \
- /usr/include/gtk-2.0/gtk/gtkobject.h \
- /usr/include/gtk-2.0/gtk/gtktypeutils.h \
- /usr/include/gtk-2.0/gtk/gtktypebuiltins.h \
- /usr/include/gtk-2.0/gtk/gtkdebug.h \
- /usr/include/gtk-2.0/gtk/gtkadjustment.h \
- /usr/include/gtk-2.0/gtk/gtkstyle.h \
- /usr/include/gtk-2.0/gtk/gtksettings.h /usr/include/gtk-2.0/gtk/gtkrc.h \
- /usr/include/atk-1.0/atk/atk.h /usr/include/atk-1.0/atk/atkobject.h \
- /usr/include/atk-1.0/atk/atkstate.h \
- /usr/include/atk-1.0/atk/atkrelationtype.h \
- /usr/include/atk-1.0/atk/atkaction.h \
- /usr/include/atk-1.0/atk/atkcomponent.h \
- /usr/include/atk-1.0/atk/atkutil.h \
- /usr/include/atk-1.0/atk/atkdocument.h \
- /usr/include/atk-1.0/atk/atkeditabletext.h \
- /usr/include/atk-1.0/atk/atktext.h \
- /usr/include/atk-1.0/atk/atkgobjectaccessible.h \
- /usr/include/atk-1.0/atk/atkhyperlink.h \
- /usr/include/atk-1.0/atk/atkhyperlinkimpl.h \
- /usr/include/atk-1.0/atk/atkhypertext.h \
- /usr/include/atk-1.0/atk/atkimage.h \
- /usr/include/atk-1.0/atk/atknoopobject.h \
- /usr/include/atk-1.0/atk/atknoopobjectfactory.h \
- /usr/include/atk-1.0/atk/atkobjectfactory.h \
- /usr/include/atk-1.0/atk/atkplug.h \
- /usr/include/atk-1.0/atk/atkregistry.h \
- /usr/include/atk-1.0/atk/atkobjectfactory.h \
- /usr/include/atk-1.0/atk/atkrelation.h \
- /usr/include/atk-1.0/atk/atkrelationset.h \
- /usr/include/atk-1.0/atk/atkselection.h \
- /usr/include/atk-1.0/atk/atksocket.h \
- /usr/include/atk-1.0/atk/atkstateset.h \
- /usr/include/atk-1.0/atk/atkstreamablecontent.h \
- /usr/include/atk-1.0/atk/atktable.h /usr/include/atk-1.0/atk/atkmisc.h \
- /usr/include/atk-1.0/atk/atkvalue.h \
- /usr/include/gtk-2.0/gtk/gtkaccellabel.h \
- /usr/include/gtk-2.0/gtk/gtklabel.h /usr/include/gtk-2.0/gtk/gtkmisc.h \
- /usr/include/gtk-2.0/gtk/gtkmenu.h \
- /usr/include/gtk-2.0/gtk/gtkmenushell.h \
- /usr/include/gtk-2.0/gtk/gtkaccelmap.h \
- /usr/include/gtk-2.0/gtk/gtkaccessible.h \
- /usr/include/gtk-2.0/gtk/gtkaction.h \
- /usr/include/gtk-2.0/gtk/gtkactiongroup.h \
- /usr/include/gtk-2.0/gtk/gtkactivatable.h \
- /usr/include/gtk-2.0/gtk/gtkalignment.h \
- /usr/include/gtk-2.0/gtk/gtkarrow.h \
- /usr/include/gtk-2.0/gtk/gtkaspectframe.h \
- /usr/include/gtk-2.0/gtk/gtkframe.h \
- /usr/include/gtk-2.0/gtk/gtkassistant.h \
- /usr/include/gtk-2.0/gtk/gtkbbox.h /usr/include/gtk-2.0/gtk/gtkbox.h \
- /usr/include/gtk-2.0/gtk/gtkbindings.h \
- /usr/include/gtk-2.0/gtk/gtkbuildable.h \
- /usr/include/gtk-2.0/gtk/gtkbuilder.h \
- /usr/include/gtk-2.0/gtk/gtkbutton.h /usr/include/gtk-2.0/gtk/gtkimage.h \
- /usr/include/gtk-2.0/gtk/gtkcalendar.h \
- /usr/include/gtk-2.0/gtk/gtksignal.h \
- /usr/include/gtk-2.0/gtk/gtkmarshal.h \
- /usr/include/gtk-2.0/gtk/gtkcelleditable.h \
- /usr/include/gtk-2.0/gtk/gtkcelllayout.h \
- /usr/include/gtk-2.0/gtk/gtkcellrenderer.h \
- /usr/include/gtk-2.0/gtk/gtktreeviewcolumn.h \
- /usr/include/gtk-2.0/gtk/gtktreemodel.h \
- /usr/include/gtk-2.0/gtk/gtktreesortable.h \
- /usr/include/gtk-2.0/gtk/gtkcellrendereraccel.h \
- /usr/include/gtk-2.0/gtk/gtkcellrenderertext.h \
- /usr/include/gtk-2.0/gtk/gtkcellrenderercombo.h \
- /usr/include/gtk-2.0/gtk/gtkcellrendererpixbuf.h \
- /usr/include/gtk-2.0/gtk/gtkcellrendererprogress.h \
- /usr/include/gtk-2.0/gtk/gtkcellrendererspin.h \
- /usr/include/gtk-2.0/gtk/gtkcellrendererspinner.h \
- /usr/include/gtk-2.0/gtk/gtkcellrenderertoggle.h \
- /usr/include/gtk-2.0/gtk/gtkcellview.h \
- /usr/include/gtk-2.0/gtk/gtkcheckbutton.h \
- /usr/include/gtk-2.0/gtk/gtktogglebutton.h \
- /usr/include/gtk-2.0/gtk/gtkcheckmenuitem.h \
- /usr/include/gtk-2.0/gtk/gtkmenuitem.h \
- /usr/include/gtk-2.0/gtk/gtkitem.h \
- /usr/include/gtk-2.0/gtk/gtkclipboard.h \
- /usr/include/gtk-2.0/gtk/gtkselection.h \
- /usr/include/gtk-2.0/gtk/gtktextiter.h \
- /usr/include/gtk-2.0/gtk/gtktexttag.h \
- /usr/include/gtk-2.0/gtk/gtktextchild.h \
- /usr/include/gtk-2.0/gtk/gtkcolorbutton.h \
- /usr/include/gtk-2.0/gtk/gtkcolorsel.h \
- /usr/include/gtk-2.0/gtk/gtkvbox.h \
- /usr/include/gtk-2.0/gtk/gtkcolorseldialog.h \
- /usr/include/gtk-2.0/gtk/gtkcombobox.h \
- /usr/include/gtk-2.0/gtk/gtktreeview.h /usr/include/gtk-2.0/gtk/gtkdnd.h \
- /usr/include/gtk-2.0/gtk/gtkentry.h \
- /usr/include/gtk-2.0/gtk/gtkeditable.h \
- /usr/include/gtk-2.0/gtk/gtkimcontext.h \
- /usr/include/gtk-2.0/gtk/gtkentrybuffer.h \
- /usr/include/gtk-2.0/gtk/gtkentrycompletion.h \
- /usr/include/gtk-2.0/gtk/gtkliststore.h \
- /usr/include/gtk-2.0/gtk/gtktreemodelfilter.h \
- /usr/include/gtk-2.0/gtk/gtkcomboboxentry.h \
- /usr/include/gtk-2.0/gtk/gtkdrawingarea.h \
- /usr/include/gtk-2.0/gtk/gtkeventbox.h \
- /usr/include/gtk-2.0/gtk/gtkexpander.h \
- /usr/include/gtk-2.0/gtk/gtkfixed.h \
- /usr/include/gtk-2.0/gtk/gtkfilechooser.h \
- /usr/include/gtk-2.0/gtk/gtkfilefilter.h \
- /usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h \
- /usr/include/gtk-2.0/gtk/gtkhbox.h \
- /usr/include/gtk-2.0/gtk/gtkfilechooserdialog.h \
- /usr/include/gtk-2.0/gtk/gtkfilechooserwidget.h \
- /usr/include/gtk-2.0/gtk/gtkfontbutton.h \
- /usr/include/gtk-2.0/gtk/gtkfontsel.h /usr/include/gtk-2.0/gtk/gtkgc.h \
- /usr/include/gtk-2.0/gtk/gtkhandlebox.h \
- /usr/include/gtk-2.0/gtk/gtkhbbox.h /usr/include/gtk-2.0/gtk/gtkhpaned.h \
- /usr/include/gtk-2.0/gtk/gtkpaned.h /usr/include/gtk-2.0/gtk/gtkhruler.h \
- /usr/include/gtk-2.0/gtk/gtkruler.h /usr/include/gtk-2.0/gtk/gtkhscale.h \
- /usr/include/gtk-2.0/gtk/gtkscale.h /usr/include/gtk-2.0/gtk/gtkrange.h \
- /usr/include/gtk-2.0/gtk/gtkhscrollbar.h \
- /usr/include/gtk-2.0/gtk/gtkscrollbar.h \
- /usr/include/gtk-2.0/gtk/gtkhseparator.h \
- /usr/include/gtk-2.0/gtk/gtkseparator.h \
- /usr/include/gtk-2.0/gtk/gtkhsv.h \
- /usr/include/gtk-2.0/gtk/gtkiconfactory.h \
- /usr/include/gtk-2.0/gtk/gtkicontheme.h \
- /usr/include/gtk-2.0/gtk/gtkiconview.h \
- /usr/include/gtk-2.0/gtk/gtktooltip.h \
- /usr/include/gtk-2.0/gtk/gtkimagemenuitem.h \
- /usr/include/gtk-2.0/gtk/gtkimcontextsimple.h \
- /usr/include/gtk-2.0/gtk/gtkimmulticontext.h \
- /usr/include/gtk-2.0/gtk/gtkinfobar.h \
- /usr/include/gtk-2.0/gtk/gtkinvisible.h \
- /usr/include/gtk-2.0/gtk/gtklayout.h \
- /usr/include/gtk-2.0/gtk/gtklinkbutton.h \
- /usr/include/gtk-2.0/gtk/gtkmain.h /usr/include/gtk-2.0/gtk/gtkmenubar.h \
- /usr/include/gtk-2.0/gtk/gtkmenutoolbutton.h \
- /usr/include/gtk-2.0/gtk/gtktoolbutton.h \
- /usr/include/gtk-2.0/gtk/gtktoolitem.h \
- /usr/include/gtk-2.0/gtk/gtktooltips.h \
- /usr/include/gtk-2.0/gtk/gtksizegroup.h \
- /usr/include/gtk-2.0/gtk/gtkmessagedialog.h \
- /usr/include/gtk-2.0/gtk/gtkmodules.h \
- /usr/include/gtk-2.0/gtk/gtkmountoperation.h \
- /usr/include/gtk-2.0/gtk/gtknotebook.h \
- /usr/include/gtk-2.0/gtk/gtkoffscreenwindow.h \
- /usr/include/gtk-2.0/gtk/gtkorientable.h \
- /usr/include/gtk-2.0/gtk/gtkpagesetup.h \
- /usr/include/gtk-2.0/gtk/gtkpapersize.h \
- /usr/include/gtk-2.0/gtk/gtkplug.h /usr/include/gtk-2.0/gtk/gtksocket.h \
- /usr/include/gtk-2.0/gtk/gtkprintcontext.h \
- /usr/include/gtk-2.0/gtk/gtkprintoperation.h \
- /usr/include/gtk-2.0/gtk/gtkprintsettings.h \
- /usr/include/gtk-2.0/gtk/gtkprintoperationpreview.h \
- /usr/include/gtk-2.0/gtk/gtkprogressbar.h \
- /usr/include/gtk-2.0/gtk/gtkprogress.h \
- /usr/include/gtk-2.0/gtk/gtkradioaction.h \
- /usr/include/gtk-2.0/gtk/gtktoggleaction.h \
- /usr/include/gtk-2.0/gtk/gtkradiobutton.h \
- /usr/include/gtk-2.0/gtk/gtkradiomenuitem.h \
- /usr/include/gtk-2.0/gtk/gtkradiotoolbutton.h \
- /usr/include/gtk-2.0/gtk/gtktoggletoolbutton.h \
- /usr/include/gtk-2.0/gtk/gtkrecentaction.h \
- /usr/include/gtk-2.0/gtk/gtkrecentmanager.h \
- /usr/include/gtk-2.0/gtk/gtkrecentchooser.h \
- /usr/include/gtk-2.0/gtk/gtkrecentfilter.h \
- /usr/include/gtk-2.0/gtk/gtkrecentchooserdialog.h \
- /usr/include/gtk-2.0/gtk/gtkrecentchoosermenu.h \
- /usr/include/gtk-2.0/gtk/gtkrecentchooserwidget.h \
- /usr/include/gtk-2.0/gtk/gtkscalebutton.h \
- /usr/include/gtk-2.0/gtk/gtkscrolledwindow.h \
- /usr/include/gtk-2.0/gtk/gtkvscrollbar.h \
- /usr/include/gtk-2.0/gtk/gtkviewport.h \
- /usr/include/gtk-2.0/gtk/gtkseparatormenuitem.h \
- /usr/include/gtk-2.0/gtk/gtkseparatortoolitem.h \
- /usr/include/gtk-2.0/gtk/gtkshow.h \
- /usr/include/gtk-2.0/gtk/gtkspinbutton.h \
- /usr/include/gtk-2.0/gtk/gtkspinner.h \
- /usr/include/gtk-2.0/gtk/gtkstatusbar.h \
- /usr/include/gtk-2.0/gtk/gtkstatusicon.h \
- /usr/include/gtk-2.0/gtk/gtkstock.h /usr/include/gtk-2.0/gtk/gtktable.h \
- /usr/include/gtk-2.0/gtk/gtktearoffmenuitem.h \
- /usr/include/gtk-2.0/gtk/gtktextbuffer.h \
- /usr/include/gtk-2.0/gtk/gtktexttagtable.h \
- /usr/include/gtk-2.0/gtk/gtktextmark.h \
- /usr/include/gtk-2.0/gtk/gtktextbufferrichtext.h \
- /usr/include/gtk-2.0/gtk/gtktextview.h \
- /usr/include/gtk-2.0/gtk/gtktoolbar.h \
- /usr/include/gtk-2.0/gtk/gtkpixmap.h \
- /usr/include/gtk-2.0/gtk/gtktoolitemgroup.h \
- /usr/include/gtk-2.0/gtk/gtktoolpalette.h \
- /usr/include/gtk-2.0/gtk/gtktoolshell.h \
- /usr/include/gtk-2.0/gtk/gtktestutils.h \
- /usr/include/gtk-2.0/gtk/gtktreednd.h \
- /usr/include/gtk-2.0/gtk/gtktreemodelsort.h \
- /usr/include/gtk-2.0/gtk/gtktreeselection.h \
- /usr/include/gtk-2.0/gtk/gtktreestore.h \
- /usr/include/gtk-2.0/gtk/gtkuimanager.h \
- /usr/include/gtk-2.0/gtk/gtkvbbox.h \
- /usr/include/gtk-2.0/gtk/gtkversion.h \
- /usr/include/gtk-2.0/gtk/gtkvolumebutton.h \
- /usr/include/gtk-2.0/gtk/gtkvpaned.h \
- /usr/include/gtk-2.0/gtk/gtkvruler.h \
- /usr/include/gtk-2.0/gtk/gtkvscale.h \
- /usr/include/gtk-2.0/gtk/gtkvseparator.h \
- /usr/include/gtk-2.0/gtk/gtktext.h /usr/include/gtk-2.0/gtk/gtktree.h \
- /usr/include/gtk-2.0/gtk/gtktreeitem.h \
- /usr/include/gtk-2.0/gtk/gtkclist.h /usr/include/gtk-2.0/gtk/gtkcombo.h \
- /usr/include/gtk-2.0/gtk/gtkctree.h /usr/include/gtk-2.0/gtk/gtkcurve.h \
- /usr/include/gtk-2.0/gtk/gtkfilesel.h \
- /usr/include/gtk-2.0/gtk/gtkgamma.h \
- /usr/include/gtk-2.0/gtk/gtkinputdialog.h \
- /usr/include/gtk-2.0/gtk/gtkitemfactory.h \
- /usr/include/gtk-2.0/gtk/gtklist.h \
- /usr/include/gtk-2.0/gtk/gtklistitem.h \
- /usr/include/gtk-2.0/gtk/gtkoldeditable.h \
- /usr/include/gtk-2.0/gtk/gtkoptionmenu.h \
- /usr/include/gtk-2.0/gtk/gtkpreview.h \
- /usr/include/gtk-2.0/gtk/gtktipsquery.h \
- /usr/include/gtk-2.0/gdk/gdkkeysyms.h \
- /usr/include/gtk-2.0/gdk/gdkkeysyms-compat.h lazyfixed.h sysdep.h \
- vlazyfixed.h client.h game.h tiles.h tiles-enums.h player.h \
- player-enums.h protocol.h cmsg_union.h pmsg_union.h protocol-enums.h \
- game-enums.h version.h gtkrc.h
-gui-dial.o: gui-dial.c gui.h /usr/include/gtk-2.0/gtk/gtk.h \
- /usr/include/gtk-2.0/gdk/gdk.h \
- /usr/include/gtk-2.0/gdk/gdkapplaunchcontext.h \
- /usr/include/glib-2.0/gio/gio.h /usr/include/glib-2.0/gio/giotypes.h \
- /usr/include/glib-2.0/gio/gioenums.h /usr/include/glib-2.0/glib-object.h \
- /usr/include/glib-2.0/gobject/gbinding.h /usr/include/glib-2.0/glib.h \
- /usr/include/glib-2.0/glib/galloca.h /usr/include/glib-2.0/glib/gtypes.h \
- /usr/lib/glib-2.0/include/glibconfig.h \
- /usr/include/glib-2.0/glib/gmacros.h /usr/include/glib-2.0/glib/garray.h \
- /usr/include/glib-2.0/glib/gasyncqueue.h \
- /usr/include/glib-2.0/glib/gthread.h /usr/include/glib-2.0/glib/gerror.h \
- /usr/include/glib-2.0/glib/gquark.h /usr/include/glib-2.0/glib/gutils.h \
- /usr/include/glib-2.0/glib/gatomic.h \
- /usr/include/glib-2.0/glib/gbacktrace.h \
- /usr/include/glib-2.0/glib/gbase64.h \
- /usr/include/glib-2.0/glib/gbitlock.h \
- /usr/include/glib-2.0/glib/gbookmarkfile.h \
- /usr/include/glib-2.0/glib/gcache.h /usr/include/glib-2.0/glib/glist.h \
- /usr/include/glib-2.0/glib/gmem.h /usr/include/glib-2.0/glib/gslice.h \
- /usr/include/glib-2.0/glib/gchecksum.h \
- /usr/include/glib-2.0/glib/gcompletion.h \
- /usr/include/glib-2.0/glib/gconvert.h \
- /usr/include/glib-2.0/glib/gdataset.h /usr/include/glib-2.0/glib/gdate.h \
- /usr/include/glib-2.0/glib/gdatetime.h \
- /usr/include/glib-2.0/glib/gtimezone.h /usr/include/glib-2.0/glib/gdir.h \
- /usr/include/glib-2.0/glib/gfileutils.h \
- /usr/include/glib-2.0/glib/ghash.h /usr/include/glib-2.0/glib/ghook.h \
- /usr/include/glib-2.0/glib/ghostutils.h \
- /usr/include/glib-2.0/glib/giochannel.h \
- /usr/include/glib-2.0/glib/gmain.h /usr/include/glib-2.0/glib/gpoll.h \
- /usr/include/glib-2.0/glib/gslist.h /usr/include/glib-2.0/glib/gstring.h \
- /usr/include/glib-2.0/glib/gunicode.h \
- /usr/include/glib-2.0/glib/gkeyfile.h \
- /usr/include/glib-2.0/glib/gmappedfile.h \
- /usr/include/glib-2.0/glib/gmarkup.h \
- /usr/include/glib-2.0/glib/gmessages.h \
- /usr/include/glib-2.0/glib/gnode.h /usr/include/glib-2.0/glib/goption.h \
- /usr/include/glib-2.0/glib/gpattern.h \
- /usr/include/glib-2.0/glib/gprimes.h /usr/include/glib-2.0/glib/gqsort.h \
- /usr/include/glib-2.0/glib/gqueue.h /usr/include/glib-2.0/glib/grand.h \
- /usr/include/glib-2.0/glib/grel.h /usr/include/glib-2.0/glib/gregex.h \
- /usr/include/glib-2.0/glib/gscanner.h \
- /usr/include/glib-2.0/glib/gsequence.h \
- /usr/include/glib-2.0/glib/gshell.h /usr/include/glib-2.0/glib/gspawn.h \
- /usr/include/glib-2.0/glib/gstrfuncs.h \
- /usr/include/glib-2.0/glib/gtestutils.h \
- /usr/include/glib-2.0/glib/gthreadpool.h \
- /usr/include/glib-2.0/glib/gtimer.h /usr/include/glib-2.0/glib/gtree.h \
- /usr/include/glib-2.0/glib/gurifuncs.h \
- /usr/include/glib-2.0/glib/gvarianttype.h \
- /usr/include/glib-2.0/glib/gvariant.h \
- /usr/include/glib-2.0/gobject/gobject.h \
- /usr/include/glib-2.0/gobject/gtype.h \
- /usr/include/glib-2.0/gobject/gvalue.h \
- /usr/include/glib-2.0/gobject/gparam.h \
- /usr/include/glib-2.0/gobject/gclosure.h \
- /usr/include/glib-2.0/gobject/gsignal.h \
- /usr/include/glib-2.0/gobject/gmarshal.h \
- /usr/include/glib-2.0/gobject/gboxed.h \
- /usr/include/glib-2.0/gobject/genums.h \
- /usr/include/glib-2.0/gobject/gparamspecs.h \
- /usr/include/glib-2.0/gobject/gsourceclosure.h \
- /usr/include/glib-2.0/gobject/gtypemodule.h \
- /usr/include/glib-2.0/gobject/gtypeplugin.h \
- /usr/include/glib-2.0/gobject/gvaluearray.h \
- /usr/include/glib-2.0/gobject/gvaluetypes.h \
- /usr/include/glib-2.0/gio/gappinfo.h /usr/include/glib-2.0/gio/gaction.h \
- /usr/include/glib-2.0/gio/gsimpleaction.h \
- /usr/include/glib-2.0/gio/gactiongroup.h \
- /usr/include/glib-2.0/gio/gsimpleactiongroup.h \
- /usr/include/glib-2.0/gio/gactiongroup.h \
- /usr/include/glib-2.0/gio/gapplication.h \
- /usr/include/glib-2.0/gio/gapplicationcommandline.h \
- /usr/include/glib-2.0/gio/gasyncinitable.h \
- /usr/include/glib-2.0/gio/ginitable.h \
- /usr/include/glib-2.0/gio/gasyncresult.h \
- /usr/include/glib-2.0/gio/gbufferedinputstream.h \
- /usr/include/glib-2.0/gio/gfilterinputstream.h \
- /usr/include/glib-2.0/gio/ginputstream.h \
- /usr/include/glib-2.0/gio/gbufferedoutputstream.h \
- /usr/include/glib-2.0/gio/gfilteroutputstream.h \
- /usr/include/glib-2.0/gio/goutputstream.h \
- /usr/include/glib-2.0/gio/gcancellable.h \
- /usr/include/glib-2.0/gio/gcharsetconverter.h \
- /usr/include/glib-2.0/gio/gconverter.h \
- /usr/include/glib-2.0/gio/gcontenttype.h \
- /usr/include/glib-2.0/gio/gconverterinputstream.h \
- /usr/include/glib-2.0/gio/gconverteroutputstream.h \
- /usr/include/glib-2.0/gio/gcredentials.h \
- /usr/include/glib-2.0/gio/gdatainputstream.h \
- /usr/include/glib-2.0/gio/gdataoutputstream.h \
- /usr/include/glib-2.0/gio/gdbusaddress.h \
- /usr/include/glib-2.0/gio/gdbusauthobserver.h \
- /usr/include/glib-2.0/gio/gdbusconnection.h \
- /usr/include/glib-2.0/gio/gdbuserror.h \
- /usr/include/glib-2.0/gio/gdbusintrospection.h \
- /usr/include/glib-2.0/gio/gdbusmessage.h \
- /usr/include/glib-2.0/gio/gdbusmethodinvocation.h \
- /usr/include/glib-2.0/gio/gdbusnameowning.h \
- /usr/include/glib-2.0/gio/gdbusnamewatching.h \
- /usr/include/glib-2.0/gio/gdbusproxy.h \
- /usr/include/glib-2.0/gio/gdbusserver.h \
- /usr/include/glib-2.0/gio/gdbusutils.h \
- /usr/include/glib-2.0/gio/gdrive.h \
- /usr/include/glib-2.0/gio/gemblemedicon.h \
- /usr/include/glib-2.0/gio/gicon.h /usr/include/glib-2.0/gio/gemblem.h \
- /usr/include/glib-2.0/gio/gfileattribute.h \
- /usr/include/glib-2.0/gio/gfileenumerator.h \
- /usr/include/glib-2.0/gio/gfile.h /usr/include/glib-2.0/gio/gfileicon.h \
- /usr/include/glib-2.0/gio/gfileinfo.h \
- /usr/include/glib-2.0/gio/gfileinputstream.h \
- /usr/include/glib-2.0/gio/gfileiostream.h \
- /usr/include/glib-2.0/gio/giostream.h \
- /usr/include/glib-2.0/gio/gioerror.h \
- /usr/include/glib-2.0/gio/gfilemonitor.h \
- /usr/include/glib-2.0/gio/gfilenamecompleter.h \
- /usr/include/glib-2.0/gio/gfileoutputstream.h \
- /usr/include/glib-2.0/gio/ginetaddress.h \
- /usr/include/glib-2.0/gio/ginetsocketaddress.h \
- /usr/include/glib-2.0/gio/gsocketaddress.h \
- /usr/include/glib-2.0/gio/gioenumtypes.h \
- /usr/include/glib-2.0/gio/giomodule.h /usr/include/glib-2.0/gmodule.h \
- /usr/include/glib-2.0/gio/gioscheduler.h \
- /usr/include/glib-2.0/gio/gloadableicon.h \
- /usr/include/glib-2.0/gio/gmemoryinputstream.h \
- /usr/include/glib-2.0/gio/gmemoryoutputstream.h \
- /usr/include/glib-2.0/gio/gmount.h \
- /usr/include/glib-2.0/gio/gmountoperation.h \
- /usr/include/glib-2.0/gio/gnativevolumemonitor.h \
- /usr/include/glib-2.0/gio/gvolumemonitor.h \
- /usr/include/glib-2.0/gio/gnetworkaddress.h \
- /usr/include/glib-2.0/gio/gnetworkservice.h \
- /usr/include/glib-2.0/gio/gpermission.h \
- /usr/include/glib-2.0/gio/gpollableinputstream.h \
- /usr/include/glib-2.0/gio/gpollableoutputstream.h \
- /usr/include/glib-2.0/gio/gproxy.h \
- /usr/include/glib-2.0/gio/gproxyaddress.h \
- /usr/include/glib-2.0/gio/gproxyaddressenumerator.h \
- /usr/include/glib-2.0/gio/gsocketaddressenumerator.h \
- /usr/include/glib-2.0/gio/gproxyresolver.h \
- /usr/include/glib-2.0/gio/gresolver.h \
- /usr/include/glib-2.0/gio/gseekable.h \
- /usr/include/glib-2.0/gio/gsettings.h \
- /usr/include/glib-2.0/gio/gsimpleasyncresult.h \
- /usr/include/glib-2.0/gio/gsimplepermission.h \
- /usr/include/glib-2.0/gio/gsocketclient.h \
- /usr/include/glib-2.0/gio/gsocketconnectable.h \
- /usr/include/glib-2.0/gio/gsocketconnection.h \
- /usr/include/glib-2.0/gio/gsocket.h \
- /usr/include/glib-2.0/gio/gsocketcontrolmessage.h \
- /usr/include/glib-2.0/gio/gsocketlistener.h \
- /usr/include/glib-2.0/gio/gsocketservice.h \
- /usr/include/glib-2.0/gio/gsrvtarget.h \
- /usr/include/glib-2.0/gio/gtcpconnection.h \
- /usr/include/glib-2.0/gio/gtcpwrapperconnection.h \
- /usr/include/glib-2.0/gio/gthemedicon.h \
- /usr/include/glib-2.0/gio/gthreadedsocketservice.h \
- /usr/include/glib-2.0/gio/gtlsbackend.h \
- /usr/include/glib-2.0/gio/gtlscertificate.h \
- /usr/include/glib-2.0/gio/gtlsclientconnection.h \
- /usr/include/glib-2.0/gio/gtlsconnection.h \
- /usr/include/glib-2.0/gio/gtlsserverconnection.h \
- /usr/include/glib-2.0/gio/gvfs.h /usr/include/glib-2.0/gio/gvolume.h \
- /usr/include/glib-2.0/gio/gzlibcompressor.h \
- /usr/include/glib-2.0/gio/gzlibdecompressor.h \
- /usr/include/gtk-2.0/gdk/gdkscreen.h /usr/include/cairo/cairo.h \
- /usr/include/cairo/cairo-version.h /usr/include/cairo/cairo-features.h \
- /usr/include/cairo/cairo-deprecated.h \
- /usr/include/gtk-2.0/gdk/gdktypes.h /usr/include/pango-1.0/pango/pango.h \
- /usr/include/pango-1.0/pango/pango-attributes.h \
- /usr/include/pango-1.0/pango/pango-font.h \
- /usr/include/pango-1.0/pango/pango-coverage.h \
- /usr/include/pango-1.0/pango/pango-types.h \
- /usr/include/pango-1.0/pango/pango-gravity.h \
- /usr/include/pango-1.0/pango/pango-matrix.h \
- /usr/include/pango-1.0/pango/pango-script.h \
- /usr/include/pango-1.0/pango/pango-language.h \
- /usr/include/pango-1.0/pango/pango-bidi-type.h \
- /usr/include/pango-1.0/pango/pango-break.h \
- /usr/include/pango-1.0/pango/pango-item.h \
- /usr/include/pango-1.0/pango/pango-context.h \
- /usr/include/pango-1.0/pango/pango-fontmap.h \
- /usr/include/pango-1.0/pango/pango-fontset.h \
- /usr/include/pango-1.0/pango/pango-engine.h \
- /usr/include/pango-1.0/pango/pango-glyph.h \
- /usr/include/pango-1.0/pango/pango-enum-types.h \
- /usr/include/pango-1.0/pango/pango-features.h \
- /usr/include/pango-1.0/pango/pango-glyph-item.h \
- /usr/include/pango-1.0/pango/pango-layout.h \
- /usr/include/pango-1.0/pango/pango-tabs.h \
- /usr/include/pango-1.0/pango/pango-renderer.h \
- /usr/include/pango-1.0/pango/pango-utils.h \
- /usr/lib/gtk-2.0/include/gdkconfig.h \
- /usr/include/gtk-2.0/gdk/gdkdisplay.h \
- /usr/include/gtk-2.0/gdk/gdkevents.h /usr/include/gtk-2.0/gdk/gdkcolor.h \
- /usr/include/gtk-2.0/gdk/gdkdnd.h /usr/include/gtk-2.0/gdk/gdkinput.h \
- /usr/include/gtk-2.0/gdk/gdkcairo.h /usr/include/gtk-2.0/gdk/gdkpixbuf.h \
- /usr/include/gtk-2.0/gdk/gdkrgb.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-features.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-core.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-transform.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-animation.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-simple-anim.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-io.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-loader.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-enum-types.h \
- /usr/include/pango-1.0/pango/pangocairo.h \
- /usr/include/gtk-2.0/gdk/gdkcursor.h \
- /usr/include/gtk-2.0/gdk/gdkdisplaymanager.h \
- /usr/include/gtk-2.0/gdk/gdkdrawable.h /usr/include/gtk-2.0/gdk/gdkgc.h \
- /usr/include/gtk-2.0/gdk/gdkenumtypes.h \
- /usr/include/gtk-2.0/gdk/gdkfont.h /usr/include/gtk-2.0/gdk/gdkimage.h \
- /usr/include/gtk-2.0/gdk/gdkkeys.h /usr/include/gtk-2.0/gdk/gdkpango.h \
- /usr/include/gtk-2.0/gdk/gdkpixmap.h \
- /usr/include/gtk-2.0/gdk/gdkproperty.h \
- /usr/include/gtk-2.0/gdk/gdkregion.h \
- /usr/include/gtk-2.0/gdk/gdkselection.h \
- /usr/include/gtk-2.0/gdk/gdkspawn.h \
- /usr/include/gtk-2.0/gdk/gdktestutils.h \
- /usr/include/gtk-2.0/gdk/gdkwindow.h \
- /usr/include/gtk-2.0/gdk/gdkvisual.h \
- /usr/include/gtk-2.0/gtk/gtkaboutdialog.h \
- /usr/include/gtk-2.0/gtk/gtkdialog.h \
- /usr/include/gtk-2.0/gtk/gtkwindow.h \
- /usr/include/gtk-2.0/gtk/gtkaccelgroup.h \
- /usr/include/gtk-2.0/gtk/gtkenums.h /usr/include/gtk-2.0/gtk/gtkbin.h \
- /usr/include/gtk-2.0/gtk/gtkcontainer.h \
- /usr/include/gtk-2.0/gtk/gtkwidget.h \
- /usr/include/gtk-2.0/gtk/gtkobject.h \
- /usr/include/gtk-2.0/gtk/gtktypeutils.h \
- /usr/include/gtk-2.0/gtk/gtktypebuiltins.h \
- /usr/include/gtk-2.0/gtk/gtkdebug.h \
- /usr/include/gtk-2.0/gtk/gtkadjustment.h \
- /usr/include/gtk-2.0/gtk/gtkstyle.h \
- /usr/include/gtk-2.0/gtk/gtksettings.h /usr/include/gtk-2.0/gtk/gtkrc.h \
- /usr/include/atk-1.0/atk/atk.h /usr/include/atk-1.0/atk/atkobject.h \
- /usr/include/atk-1.0/atk/atkstate.h \
- /usr/include/atk-1.0/atk/atkrelationtype.h \
- /usr/include/atk-1.0/atk/atkaction.h \
- /usr/include/atk-1.0/atk/atkcomponent.h \
- /usr/include/atk-1.0/atk/atkutil.h \
- /usr/include/atk-1.0/atk/atkdocument.h \
- /usr/include/atk-1.0/atk/atkeditabletext.h \
- /usr/include/atk-1.0/atk/atktext.h \
- /usr/include/atk-1.0/atk/atkgobjectaccessible.h \
- /usr/include/atk-1.0/atk/atkhyperlink.h \
- /usr/include/atk-1.0/atk/atkhyperlinkimpl.h \
- /usr/include/atk-1.0/atk/atkhypertext.h \
- /usr/include/atk-1.0/atk/atkimage.h \
- /usr/include/atk-1.0/atk/atknoopobject.h \
- /usr/include/atk-1.0/atk/atknoopobjectfactory.h \
- /usr/include/atk-1.0/atk/atkobjectfactory.h \
- /usr/include/atk-1.0/atk/atkplug.h \
- /usr/include/atk-1.0/atk/atkregistry.h \
- /usr/include/atk-1.0/atk/atkobjectfactory.h \
- /usr/include/atk-1.0/atk/atkrelation.h \
- /usr/include/atk-1.0/atk/atkrelationset.h \
- /usr/include/atk-1.0/atk/atkselection.h \
- /usr/include/atk-1.0/atk/atksocket.h \
- /usr/include/atk-1.0/atk/atkstateset.h \
- /usr/include/atk-1.0/atk/atkstreamablecontent.h \
- /usr/include/atk-1.0/atk/atktable.h /usr/include/atk-1.0/atk/atkmisc.h \
- /usr/include/atk-1.0/atk/atkvalue.h \
- /usr/include/gtk-2.0/gtk/gtkaccellabel.h \
- /usr/include/gtk-2.0/gtk/gtklabel.h /usr/include/gtk-2.0/gtk/gtkmisc.h \
- /usr/include/gtk-2.0/gtk/gtkmenu.h \
- /usr/include/gtk-2.0/gtk/gtkmenushell.h \
- /usr/include/gtk-2.0/gtk/gtkaccelmap.h \
- /usr/include/gtk-2.0/gtk/gtkaccessible.h \
- /usr/include/gtk-2.0/gtk/gtkaction.h \
- /usr/include/gtk-2.0/gtk/gtkactiongroup.h \
- /usr/include/gtk-2.0/gtk/gtkactivatable.h \
- /usr/include/gtk-2.0/gtk/gtkalignment.h \
- /usr/include/gtk-2.0/gtk/gtkarrow.h \
- /usr/include/gtk-2.0/gtk/gtkaspectframe.h \
- /usr/include/gtk-2.0/gtk/gtkframe.h \
- /usr/include/gtk-2.0/gtk/gtkassistant.h \
- /usr/include/gtk-2.0/gtk/gtkbbox.h /usr/include/gtk-2.0/gtk/gtkbox.h \
- /usr/include/gtk-2.0/gtk/gtkbindings.h \
- /usr/include/gtk-2.0/gtk/gtkbuildable.h \
- /usr/include/gtk-2.0/gtk/gtkbuilder.h \
- /usr/include/gtk-2.0/gtk/gtkbutton.h /usr/include/gtk-2.0/gtk/gtkimage.h \
- /usr/include/gtk-2.0/gtk/gtkcalendar.h \
- /usr/include/gtk-2.0/gtk/gtksignal.h \
- /usr/include/gtk-2.0/gtk/gtkmarshal.h \
- /usr/include/gtk-2.0/gtk/gtkcelleditable.h \
- /usr/include/gtk-2.0/gtk/gtkcelllayout.h \
- /usr/include/gtk-2.0/gtk/gtkcellrenderer.h \
- /usr/include/gtk-2.0/gtk/gtktreeviewcolumn.h \
- /usr/include/gtk-2.0/gtk/gtktreemodel.h \
- /usr/include/gtk-2.0/gtk/gtktreesortable.h \
- /usr/include/gtk-2.0/gtk/gtkcellrendereraccel.h \
- /usr/include/gtk-2.0/gtk/gtkcellrenderertext.h \
- /usr/include/gtk-2.0/gtk/gtkcellrenderercombo.h \
- /usr/include/gtk-2.0/gtk/gtkcellrendererpixbuf.h \
- /usr/include/gtk-2.0/gtk/gtkcellrendererprogress.h \
- /usr/include/gtk-2.0/gtk/gtkcellrendererspin.h \
- /usr/include/gtk-2.0/gtk/gtkcellrendererspinner.h \
- /usr/include/gtk-2.0/gtk/gtkcellrenderertoggle.h \
- /usr/include/gtk-2.0/gtk/gtkcellview.h \
- /usr/include/gtk-2.0/gtk/gtkcheckbutton.h \
- /usr/include/gtk-2.0/gtk/gtktogglebutton.h \
- /usr/include/gtk-2.0/gtk/gtkcheckmenuitem.h \
- /usr/include/gtk-2.0/gtk/gtkmenuitem.h \
- /usr/include/gtk-2.0/gtk/gtkitem.h \
- /usr/include/gtk-2.0/gtk/gtkclipboard.h \
- /usr/include/gtk-2.0/gtk/gtkselection.h \
- /usr/include/gtk-2.0/gtk/gtktextiter.h \
- /usr/include/gtk-2.0/gtk/gtktexttag.h \
- /usr/include/gtk-2.0/gtk/gtktextchild.h \
- /usr/include/gtk-2.0/gtk/gtkcolorbutton.h \
- /usr/include/gtk-2.0/gtk/gtkcolorsel.h \
- /usr/include/gtk-2.0/gtk/gtkvbox.h \
- /usr/include/gtk-2.0/gtk/gtkcolorseldialog.h \
- /usr/include/gtk-2.0/gtk/gtkcombobox.h \
- /usr/include/gtk-2.0/gtk/gtktreeview.h /usr/include/gtk-2.0/gtk/gtkdnd.h \
- /usr/include/gtk-2.0/gtk/gtkentry.h \
- /usr/include/gtk-2.0/gtk/gtkeditable.h \
- /usr/include/gtk-2.0/gtk/gtkimcontext.h \
- /usr/include/gtk-2.0/gtk/gtkentrybuffer.h \
- /usr/include/gtk-2.0/gtk/gtkentrycompletion.h \
- /usr/include/gtk-2.0/gtk/gtkliststore.h \
- /usr/include/gtk-2.0/gtk/gtktreemodelfilter.h \
- /usr/include/gtk-2.0/gtk/gtkcomboboxentry.h \
- /usr/include/gtk-2.0/gtk/gtkdrawingarea.h \
- /usr/include/gtk-2.0/gtk/gtkeventbox.h \
- /usr/include/gtk-2.0/gtk/gtkexpander.h \
- /usr/include/gtk-2.0/gtk/gtkfixed.h \
- /usr/include/gtk-2.0/gtk/gtkfilechooser.h \
- /usr/include/gtk-2.0/gtk/gtkfilefilter.h \
- /usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h \
- /usr/include/gtk-2.0/gtk/gtkhbox.h \
- /usr/include/gtk-2.0/gtk/gtkfilechooserdialog.h \
- /usr/include/gtk-2.0/gtk/gtkfilechooserwidget.h \
- /usr/include/gtk-2.0/gtk/gtkfontbutton.h \
- /usr/include/gtk-2.0/gtk/gtkfontsel.h /usr/include/gtk-2.0/gtk/gtkgc.h \
- /usr/include/gtk-2.0/gtk/gtkhandlebox.h \
- /usr/include/gtk-2.0/gtk/gtkhbbox.h /usr/include/gtk-2.0/gtk/gtkhpaned.h \
- /usr/include/gtk-2.0/gtk/gtkpaned.h /usr/include/gtk-2.0/gtk/gtkhruler.h \
- /usr/include/gtk-2.0/gtk/gtkruler.h /usr/include/gtk-2.0/gtk/gtkhscale.h \
- /usr/include/gtk-2.0/gtk/gtkscale.h /usr/include/gtk-2.0/gtk/gtkrange.h \
- /usr/include/gtk-2.0/gtk/gtkhscrollbar.h \
- /usr/include/gtk-2.0/gtk/gtkscrollbar.h \
- /usr/include/gtk-2.0/gtk/gtkhseparator.h \
- /usr/include/gtk-2.0/gtk/gtkseparator.h \
- /usr/include/gtk-2.0/gtk/gtkhsv.h \
- /usr/include/gtk-2.0/gtk/gtkiconfactory.h \
- /usr/include/gtk-2.0/gtk/gtkicontheme.h \
- /usr/include/gtk-2.0/gtk/gtkiconview.h \
- /usr/include/gtk-2.0/gtk/gtktooltip.h \
- /usr/include/gtk-2.0/gtk/gtkimagemenuitem.h \
- /usr/include/gtk-2.0/gtk/gtkimcontextsimple.h \
- /usr/include/gtk-2.0/gtk/gtkimmulticontext.h \
- /usr/include/gtk-2.0/gtk/gtkinfobar.h \
- /usr/include/gtk-2.0/gtk/gtkinvisible.h \
- /usr/include/gtk-2.0/gtk/gtklayout.h \
- /usr/include/gtk-2.0/gtk/gtklinkbutton.h \
- /usr/include/gtk-2.0/gtk/gtkmain.h /usr/include/gtk-2.0/gtk/gtkmenubar.h \
- /usr/include/gtk-2.0/gtk/gtkmenutoolbutton.h \
- /usr/include/gtk-2.0/gtk/gtktoolbutton.h \
- /usr/include/gtk-2.0/gtk/gtktoolitem.h \
- /usr/include/gtk-2.0/gtk/gtktooltips.h \
- /usr/include/gtk-2.0/gtk/gtksizegroup.h \
- /usr/include/gtk-2.0/gtk/gtkmessagedialog.h \
- /usr/include/gtk-2.0/gtk/gtkmodules.h \
- /usr/include/gtk-2.0/gtk/gtkmountoperation.h \
- /usr/include/gtk-2.0/gtk/gtknotebook.h \
- /usr/include/gtk-2.0/gtk/gtkoffscreenwindow.h \
- /usr/include/gtk-2.0/gtk/gtkorientable.h \
- /usr/include/gtk-2.0/gtk/gtkpagesetup.h \
- /usr/include/gtk-2.0/gtk/gtkpapersize.h \
- /usr/include/gtk-2.0/gtk/gtkplug.h /usr/include/gtk-2.0/gtk/gtksocket.h \
- /usr/include/gtk-2.0/gtk/gtkprintcontext.h \
- /usr/include/gtk-2.0/gtk/gtkprintoperation.h \
- /usr/include/gtk-2.0/gtk/gtkprintsettings.h \
- /usr/include/gtk-2.0/gtk/gtkprintoperationpreview.h \
- /usr/include/gtk-2.0/gtk/gtkprogressbar.h \
- /usr/include/gtk-2.0/gtk/gtkprogress.h \
- /usr/include/gtk-2.0/gtk/gtkradioaction.h \
- /usr/include/gtk-2.0/gtk/gtktoggleaction.h \
- /usr/include/gtk-2.0/gtk/gtkradiobutton.h \
- /usr/include/gtk-2.0/gtk/gtkradiomenuitem.h \
- /usr/include/gtk-2.0/gtk/gtkradiotoolbutton.h \
- /usr/include/gtk-2.0/gtk/gtktoggletoolbutton.h \
- /usr/include/gtk-2.0/gtk/gtkrecentaction.h \
- /usr/include/gtk-2.0/gtk/gtkrecentmanager.h \
- /usr/include/gtk-2.0/gtk/gtkrecentchooser.h \
- /usr/include/gtk-2.0/gtk/gtkrecentfilter.h \
- /usr/include/gtk-2.0/gtk/gtkrecentchooserdialog.h \
- /usr/include/gtk-2.0/gtk/gtkrecentchoosermenu.h \
- /usr/include/gtk-2.0/gtk/gtkrecentchooserwidget.h \
- /usr/include/gtk-2.0/gtk/gtkscalebutton.h \
- /usr/include/gtk-2.0/gtk/gtkscrolledwindow.h \
- /usr/include/gtk-2.0/gtk/gtkvscrollbar.h \
- /usr/include/gtk-2.0/gtk/gtkviewport.h \
- /usr/include/gtk-2.0/gtk/gtkseparatormenuitem.h \
- /usr/include/gtk-2.0/gtk/gtkseparatortoolitem.h \
- /usr/include/gtk-2.0/gtk/gtkshow.h \
- /usr/include/gtk-2.0/gtk/gtkspinbutton.h \
- /usr/include/gtk-2.0/gtk/gtkspinner.h \
- /usr/include/gtk-2.0/gtk/gtkstatusbar.h \
- /usr/include/gtk-2.0/gtk/gtkstatusicon.h \
- /usr/include/gtk-2.0/gtk/gtkstock.h /usr/include/gtk-2.0/gtk/gtktable.h \
- /usr/include/gtk-2.0/gtk/gtktearoffmenuitem.h \
- /usr/include/gtk-2.0/gtk/gtktextbuffer.h \
- /usr/include/gtk-2.0/gtk/gtktexttagtable.h \
- /usr/include/gtk-2.0/gtk/gtktextmark.h \
- /usr/include/gtk-2.0/gtk/gtktextbufferrichtext.h \
- /usr/include/gtk-2.0/gtk/gtktextview.h \
- /usr/include/gtk-2.0/gtk/gtktoolbar.h \
- /usr/include/gtk-2.0/gtk/gtkpixmap.h \
- /usr/include/gtk-2.0/gtk/gtktoolitemgroup.h \
- /usr/include/gtk-2.0/gtk/gtktoolpalette.h \
- /usr/include/gtk-2.0/gtk/gtktoolshell.h \
- /usr/include/gtk-2.0/gtk/gtktestutils.h \
- /usr/include/gtk-2.0/gtk/gtktreednd.h \
- /usr/include/gtk-2.0/gtk/gtktreemodelsort.h \
- /usr/include/gtk-2.0/gtk/gtktreeselection.h \
- /usr/include/gtk-2.0/gtk/gtktreestore.h \
- /usr/include/gtk-2.0/gtk/gtkuimanager.h \
- /usr/include/gtk-2.0/gtk/gtkvbbox.h \
- /usr/include/gtk-2.0/gtk/gtkversion.h \
- /usr/include/gtk-2.0/gtk/gtkvolumebutton.h \
- /usr/include/gtk-2.0/gtk/gtkvpaned.h \
- /usr/include/gtk-2.0/gtk/gtkvruler.h \
- /usr/include/gtk-2.0/gtk/gtkvscale.h \
- /usr/include/gtk-2.0/gtk/gtkvseparator.h \
- /usr/include/gtk-2.0/gtk/gtktext.h /usr/include/gtk-2.0/gtk/gtktree.h \
- /usr/include/gtk-2.0/gtk/gtktreeitem.h \
- /usr/include/gtk-2.0/gtk/gtkclist.h /usr/include/gtk-2.0/gtk/gtkcombo.h \
- /usr/include/gtk-2.0/gtk/gtkctree.h /usr/include/gtk-2.0/gtk/gtkcurve.h \
- /usr/include/gtk-2.0/gtk/gtkfilesel.h \
- /usr/include/gtk-2.0/gtk/gtkgamma.h \
- /usr/include/gtk-2.0/gtk/gtkinputdialog.h \
- /usr/include/gtk-2.0/gtk/gtkitemfactory.h \
- /usr/include/gtk-2.0/gtk/gtklist.h \
- /usr/include/gtk-2.0/gtk/gtklistitem.h \
- /usr/include/gtk-2.0/gtk/gtkoldeditable.h \
- /usr/include/gtk-2.0/gtk/gtkoptionmenu.h \
- /usr/include/gtk-2.0/gtk/gtkpreview.h \
- /usr/include/gtk-2.0/gtk/gtktipsquery.h \
- /usr/include/gtk-2.0/gdk/gdkkeysyms.h \
- /usr/include/gtk-2.0/gdk/gdkkeysyms-compat.h lazyfixed.h sysdep.h \
- vlazyfixed.h client.h game.h tiles.h tiles-enums.h player.h \
- player-enums.h protocol.h cmsg_union.h pmsg_union.h protocol-enums.h \
- game-enums.h version.h
-lazyfixed.o: lazyfixed.c lazyfixed.h /usr/include/gtk-2.0/gtk/gtkfixed.h \
- /usr/include/gtk-2.0/gtk/gtkcontainer.h \
- /usr/include/gtk-2.0/gtk/gtkwidget.h /usr/include/gtk-2.0/gdk/gdk.h \
- /usr/include/gtk-2.0/gdk/gdkapplaunchcontext.h \
- /usr/include/glib-2.0/gio/gio.h /usr/include/glib-2.0/gio/giotypes.h \
- /usr/include/glib-2.0/gio/gioenums.h /usr/include/glib-2.0/glib-object.h \
- /usr/include/glib-2.0/gobject/gbinding.h /usr/include/glib-2.0/glib.h \
- /usr/include/glib-2.0/glib/galloca.h /usr/include/glib-2.0/glib/gtypes.h \
- /usr/lib/glib-2.0/include/glibconfig.h \
- /usr/include/glib-2.0/glib/gmacros.h /usr/include/glib-2.0/glib/garray.h \
- /usr/include/glib-2.0/glib/gasyncqueue.h \
- /usr/include/glib-2.0/glib/gthread.h /usr/include/glib-2.0/glib/gerror.h \
- /usr/include/glib-2.0/glib/gquark.h /usr/include/glib-2.0/glib/gutils.h \
- /usr/include/glib-2.0/glib/gatomic.h \
- /usr/include/glib-2.0/glib/gbacktrace.h \
- /usr/include/glib-2.0/glib/gbase64.h \
- /usr/include/glib-2.0/glib/gbitlock.h \
- /usr/include/glib-2.0/glib/gbookmarkfile.h \
- /usr/include/glib-2.0/glib/gcache.h /usr/include/glib-2.0/glib/glist.h \
- /usr/include/glib-2.0/glib/gmem.h /usr/include/glib-2.0/glib/gslice.h \
- /usr/include/glib-2.0/glib/gchecksum.h \
- /usr/include/glib-2.0/glib/gcompletion.h \
- /usr/include/glib-2.0/glib/gconvert.h \
- /usr/include/glib-2.0/glib/gdataset.h /usr/include/glib-2.0/glib/gdate.h \
- /usr/include/glib-2.0/glib/gdatetime.h \
- /usr/include/glib-2.0/glib/gtimezone.h /usr/include/glib-2.0/glib/gdir.h \
- /usr/include/glib-2.0/glib/gfileutils.h \
- /usr/include/glib-2.0/glib/ghash.h /usr/include/glib-2.0/glib/ghook.h \
- /usr/include/glib-2.0/glib/ghostutils.h \
- /usr/include/glib-2.0/glib/giochannel.h \
- /usr/include/glib-2.0/glib/gmain.h /usr/include/glib-2.0/glib/gpoll.h \
- /usr/include/glib-2.0/glib/gslist.h /usr/include/glib-2.0/glib/gstring.h \
- /usr/include/glib-2.0/glib/gunicode.h \
- /usr/include/glib-2.0/glib/gkeyfile.h \
- /usr/include/glib-2.0/glib/gmappedfile.h \
- /usr/include/glib-2.0/glib/gmarkup.h \
- /usr/include/glib-2.0/glib/gmessages.h \
- /usr/include/glib-2.0/glib/gnode.h /usr/include/glib-2.0/glib/goption.h \
- /usr/include/glib-2.0/glib/gpattern.h \
- /usr/include/glib-2.0/glib/gprimes.h /usr/include/glib-2.0/glib/gqsort.h \
- /usr/include/glib-2.0/glib/gqueue.h /usr/include/glib-2.0/glib/grand.h \
- /usr/include/glib-2.0/glib/grel.h /usr/include/glib-2.0/glib/gregex.h \
- /usr/include/glib-2.0/glib/gscanner.h \
- /usr/include/glib-2.0/glib/gsequence.h \
- /usr/include/glib-2.0/glib/gshell.h /usr/include/glib-2.0/glib/gspawn.h \
- /usr/include/glib-2.0/glib/gstrfuncs.h \
- /usr/include/glib-2.0/glib/gtestutils.h \
- /usr/include/glib-2.0/glib/gthreadpool.h \
- /usr/include/glib-2.0/glib/gtimer.h /usr/include/glib-2.0/glib/gtree.h \
- /usr/include/glib-2.0/glib/gurifuncs.h \
- /usr/include/glib-2.0/glib/gvarianttype.h \
- /usr/include/glib-2.0/glib/gvariant.h \
- /usr/include/glib-2.0/gobject/gobject.h \
- /usr/include/glib-2.0/gobject/gtype.h \
- /usr/include/glib-2.0/gobject/gvalue.h \
- /usr/include/glib-2.0/gobject/gparam.h \
- /usr/include/glib-2.0/gobject/gclosure.h \
- /usr/include/glib-2.0/gobject/gsignal.h \
- /usr/include/glib-2.0/gobject/gmarshal.h \
- /usr/include/glib-2.0/gobject/gboxed.h \
- /usr/include/glib-2.0/gobject/genums.h \
- /usr/include/glib-2.0/gobject/gparamspecs.h \
- /usr/include/glib-2.0/gobject/gsourceclosure.h \
- /usr/include/glib-2.0/gobject/gtypemodule.h \
- /usr/include/glib-2.0/gobject/gtypeplugin.h \
- /usr/include/glib-2.0/gobject/gvaluearray.h \
- /usr/include/glib-2.0/gobject/gvaluetypes.h \
- /usr/include/glib-2.0/gio/gappinfo.h /usr/include/glib-2.0/gio/gaction.h \
- /usr/include/glib-2.0/gio/gsimpleaction.h \
- /usr/include/glib-2.0/gio/gactiongroup.h \
- /usr/include/glib-2.0/gio/gsimpleactiongroup.h \
- /usr/include/glib-2.0/gio/gactiongroup.h \
- /usr/include/glib-2.0/gio/gapplication.h \
- /usr/include/glib-2.0/gio/gapplicationcommandline.h \
- /usr/include/glib-2.0/gio/gasyncinitable.h \
- /usr/include/glib-2.0/gio/ginitable.h \
- /usr/include/glib-2.0/gio/gasyncresult.h \
- /usr/include/glib-2.0/gio/gbufferedinputstream.h \
- /usr/include/glib-2.0/gio/gfilterinputstream.h \
- /usr/include/glib-2.0/gio/ginputstream.h \
- /usr/include/glib-2.0/gio/gbufferedoutputstream.h \
- /usr/include/glib-2.0/gio/gfilteroutputstream.h \
- /usr/include/glib-2.0/gio/goutputstream.h \
- /usr/include/glib-2.0/gio/gcancellable.h \
- /usr/include/glib-2.0/gio/gcharsetconverter.h \
- /usr/include/glib-2.0/gio/gconverter.h \
- /usr/include/glib-2.0/gio/gcontenttype.h \
- /usr/include/glib-2.0/gio/gconverterinputstream.h \
- /usr/include/glib-2.0/gio/gconverteroutputstream.h \
- /usr/include/glib-2.0/gio/gcredentials.h \
- /usr/include/glib-2.0/gio/gdatainputstream.h \
- /usr/include/glib-2.0/gio/gdataoutputstream.h \
- /usr/include/glib-2.0/gio/gdbusaddress.h \
- /usr/include/glib-2.0/gio/gdbusauthobserver.h \
- /usr/include/glib-2.0/gio/gdbusconnection.h \
- /usr/include/glib-2.0/gio/gdbuserror.h \
- /usr/include/glib-2.0/gio/gdbusintrospection.h \
- /usr/include/glib-2.0/gio/gdbusmessage.h \
- /usr/include/glib-2.0/gio/gdbusmethodinvocation.h \
- /usr/include/glib-2.0/gio/gdbusnameowning.h \
- /usr/include/glib-2.0/gio/gdbusnamewatching.h \
- /usr/include/glib-2.0/gio/gdbusproxy.h \
- /usr/include/glib-2.0/gio/gdbusserver.h \
- /usr/include/glib-2.0/gio/gdbusutils.h \
- /usr/include/glib-2.0/gio/gdrive.h \
- /usr/include/glib-2.0/gio/gemblemedicon.h \
- /usr/include/glib-2.0/gio/gicon.h /usr/include/glib-2.0/gio/gemblem.h \
- /usr/include/glib-2.0/gio/gfileattribute.h \
- /usr/include/glib-2.0/gio/gfileenumerator.h \
- /usr/include/glib-2.0/gio/gfile.h /usr/include/glib-2.0/gio/gfileicon.h \
- /usr/include/glib-2.0/gio/gfileinfo.h \
- /usr/include/glib-2.0/gio/gfileinputstream.h \
- /usr/include/glib-2.0/gio/gfileiostream.h \
- /usr/include/glib-2.0/gio/giostream.h \
- /usr/include/glib-2.0/gio/gioerror.h \
- /usr/include/glib-2.0/gio/gfilemonitor.h \
- /usr/include/glib-2.0/gio/gfilenamecompleter.h \
- /usr/include/glib-2.0/gio/gfileoutputstream.h \
- /usr/include/glib-2.0/gio/ginetaddress.h \
- /usr/include/glib-2.0/gio/ginetsocketaddress.h \
- /usr/include/glib-2.0/gio/gsocketaddress.h \
- /usr/include/glib-2.0/gio/gioenumtypes.h \
- /usr/include/glib-2.0/gio/giomodule.h /usr/include/glib-2.0/gmodule.h \
- /usr/include/glib-2.0/gio/gioscheduler.h \
- /usr/include/glib-2.0/gio/gloadableicon.h \
- /usr/include/glib-2.0/gio/gmemoryinputstream.h \
- /usr/include/glib-2.0/gio/gmemoryoutputstream.h \
- /usr/include/glib-2.0/gio/gmount.h \
- /usr/include/glib-2.0/gio/gmountoperation.h \
- /usr/include/glib-2.0/gio/gnativevolumemonitor.h \
- /usr/include/glib-2.0/gio/gvolumemonitor.h \
- /usr/include/glib-2.0/gio/gnetworkaddress.h \
- /usr/include/glib-2.0/gio/gnetworkservice.h \
- /usr/include/glib-2.0/gio/gpermission.h \
- /usr/include/glib-2.0/gio/gpollableinputstream.h \
- /usr/include/glib-2.0/gio/gpollableoutputstream.h \
- /usr/include/glib-2.0/gio/gproxy.h \
- /usr/include/glib-2.0/gio/gproxyaddress.h \
- /usr/include/glib-2.0/gio/gproxyaddressenumerator.h \
- /usr/include/glib-2.0/gio/gsocketaddressenumerator.h \
- /usr/include/glib-2.0/gio/gproxyresolver.h \
- /usr/include/glib-2.0/gio/gresolver.h \
- /usr/include/glib-2.0/gio/gseekable.h \
- /usr/include/glib-2.0/gio/gsettings.h \
- /usr/include/glib-2.0/gio/gsimpleasyncresult.h \
- /usr/include/glib-2.0/gio/gsimplepermission.h \
- /usr/include/glib-2.0/gio/gsocketclient.h \
- /usr/include/glib-2.0/gio/gsocketconnectable.h \
- /usr/include/glib-2.0/gio/gsocketconnection.h \
- /usr/include/glib-2.0/gio/gsocket.h \
- /usr/include/glib-2.0/gio/gsocketcontrolmessage.h \
- /usr/include/glib-2.0/gio/gsocketlistener.h \
- /usr/include/glib-2.0/gio/gsocketservice.h \
- /usr/include/glib-2.0/gio/gsrvtarget.h \
- /usr/include/glib-2.0/gio/gtcpconnection.h \
- /usr/include/glib-2.0/gio/gtcpwrapperconnection.h \
- /usr/include/glib-2.0/gio/gthemedicon.h \
- /usr/include/glib-2.0/gio/gthreadedsocketservice.h \
- /usr/include/glib-2.0/gio/gtlsbackend.h \
- /usr/include/glib-2.0/gio/gtlscertificate.h \
- /usr/include/glib-2.0/gio/gtlsclientconnection.h \
- /usr/include/glib-2.0/gio/gtlsconnection.h \
- /usr/include/glib-2.0/gio/gtlsserverconnection.h \
- /usr/include/glib-2.0/gio/gvfs.h /usr/include/glib-2.0/gio/gvolume.h \
- /usr/include/glib-2.0/gio/gzlibcompressor.h \
- /usr/include/glib-2.0/gio/gzlibdecompressor.h \
- /usr/include/gtk-2.0/gdk/gdkscreen.h /usr/include/cairo/cairo.h \
- /usr/include/cairo/cairo-version.h /usr/include/cairo/cairo-features.h \
- /usr/include/cairo/cairo-deprecated.h \
- /usr/include/gtk-2.0/gdk/gdktypes.h /usr/include/pango-1.0/pango/pango.h \
- /usr/include/pango-1.0/pango/pango-attributes.h \
- /usr/include/pango-1.0/pango/pango-font.h \
- /usr/include/pango-1.0/pango/pango-coverage.h \
- /usr/include/pango-1.0/pango/pango-types.h \
- /usr/include/pango-1.0/pango/pango-gravity.h \
- /usr/include/pango-1.0/pango/pango-matrix.h \
- /usr/include/pango-1.0/pango/pango-script.h \
- /usr/include/pango-1.0/pango/pango-language.h \
- /usr/include/pango-1.0/pango/pango-bidi-type.h \
- /usr/include/pango-1.0/pango/pango-break.h \
- /usr/include/pango-1.0/pango/pango-item.h \
- /usr/include/pango-1.0/pango/pango-context.h \
- /usr/include/pango-1.0/pango/pango-fontmap.h \
- /usr/include/pango-1.0/pango/pango-fontset.h \
- /usr/include/pango-1.0/pango/pango-engine.h \
- /usr/include/pango-1.0/pango/pango-glyph.h \
- /usr/include/pango-1.0/pango/pango-enum-types.h \
- /usr/include/pango-1.0/pango/pango-features.h \
- /usr/include/pango-1.0/pango/pango-glyph-item.h \
- /usr/include/pango-1.0/pango/pango-layout.h \
- /usr/include/pango-1.0/pango/pango-tabs.h \
- /usr/include/pango-1.0/pango/pango-renderer.h \
- /usr/include/pango-1.0/pango/pango-utils.h \
- /usr/lib/gtk-2.0/include/gdkconfig.h \
- /usr/include/gtk-2.0/gdk/gdkdisplay.h \
- /usr/include/gtk-2.0/gdk/gdkevents.h /usr/include/gtk-2.0/gdk/gdkcolor.h \
- /usr/include/gtk-2.0/gdk/gdkdnd.h /usr/include/gtk-2.0/gdk/gdkinput.h \
- /usr/include/gtk-2.0/gdk/gdkcairo.h /usr/include/gtk-2.0/gdk/gdkpixbuf.h \
- /usr/include/gtk-2.0/gdk/gdkrgb.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-features.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-core.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-transform.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-animation.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-simple-anim.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-io.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-loader.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-enum-types.h \
- /usr/include/pango-1.0/pango/pangocairo.h \
- /usr/include/gtk-2.0/gdk/gdkcursor.h \
- /usr/include/gtk-2.0/gdk/gdkdisplaymanager.h \
- /usr/include/gtk-2.0/gdk/gdkdrawable.h /usr/include/gtk-2.0/gdk/gdkgc.h \
- /usr/include/gtk-2.0/gdk/gdkenumtypes.h \
- /usr/include/gtk-2.0/gdk/gdkfont.h /usr/include/gtk-2.0/gdk/gdkimage.h \
- /usr/include/gtk-2.0/gdk/gdkkeys.h /usr/include/gtk-2.0/gdk/gdkpango.h \
- /usr/include/gtk-2.0/gdk/gdkpixmap.h \
- /usr/include/gtk-2.0/gdk/gdkproperty.h \
- /usr/include/gtk-2.0/gdk/gdkregion.h \
- /usr/include/gtk-2.0/gdk/gdkselection.h \
- /usr/include/gtk-2.0/gdk/gdkspawn.h \
- /usr/include/gtk-2.0/gdk/gdktestutils.h \
- /usr/include/gtk-2.0/gdk/gdkwindow.h \
- /usr/include/gtk-2.0/gdk/gdkvisual.h \
- /usr/include/gtk-2.0/gtk/gtkaccelgroup.h \
- /usr/include/gtk-2.0/gtk/gtkenums.h /usr/include/gtk-2.0/gtk/gtkobject.h \
- /usr/include/gtk-2.0/gtk/gtktypeutils.h \
- /usr/include/gtk-2.0/gtk/gtktypebuiltins.h \
- /usr/include/gtk-2.0/gtk/gtkdebug.h \
- /usr/include/gtk-2.0/gtk/gtkadjustment.h \
- /usr/include/gtk-2.0/gtk/gtkstyle.h \
- /usr/include/gtk-2.0/gtk/gtksettings.h /usr/include/gtk-2.0/gtk/gtkrc.h \
- /usr/include/atk-1.0/atk/atk.h /usr/include/atk-1.0/atk/atkobject.h \
- /usr/include/atk-1.0/atk/atkstate.h \
- /usr/include/atk-1.0/atk/atkrelationtype.h \
- /usr/include/atk-1.0/atk/atkaction.h \
- /usr/include/atk-1.0/atk/atkcomponent.h \
- /usr/include/atk-1.0/atk/atkutil.h \
- /usr/include/atk-1.0/atk/atkdocument.h \
- /usr/include/atk-1.0/atk/atkeditabletext.h \
- /usr/include/atk-1.0/atk/atktext.h \
- /usr/include/atk-1.0/atk/atkgobjectaccessible.h \
- /usr/include/atk-1.0/atk/atkhyperlink.h \
- /usr/include/atk-1.0/atk/atkhyperlinkimpl.h \
- /usr/include/atk-1.0/atk/atkhypertext.h \
- /usr/include/atk-1.0/atk/atkimage.h \
- /usr/include/atk-1.0/atk/atknoopobject.h \
- /usr/include/atk-1.0/atk/atknoopobjectfactory.h \
- /usr/include/atk-1.0/atk/atkobjectfactory.h \
- /usr/include/atk-1.0/atk/atkplug.h \
- /usr/include/atk-1.0/atk/atkregistry.h \
- /usr/include/atk-1.0/atk/atkobjectfactory.h \
- /usr/include/atk-1.0/atk/atkrelation.h \
- /usr/include/atk-1.0/atk/atkrelationset.h \
- /usr/include/atk-1.0/atk/atkselection.h \
- /usr/include/atk-1.0/atk/atksocket.h \
- /usr/include/atk-1.0/atk/atkstateset.h \
- /usr/include/atk-1.0/atk/atkstreamablecontent.h \
- /usr/include/atk-1.0/atk/atktable.h /usr/include/atk-1.0/atk/atkmisc.h \
- /usr/include/atk-1.0/atk/atkvalue.h sysdep.h
-vlazyfixed.o: vlazyfixed.c vlazyfixed.h \
- /usr/include/gtk-2.0/gtk/gtkfixed.h \
- /usr/include/gtk-2.0/gtk/gtkcontainer.h \
- /usr/include/gtk-2.0/gtk/gtkwidget.h /usr/include/gtk-2.0/gdk/gdk.h \
- /usr/include/gtk-2.0/gdk/gdkapplaunchcontext.h \
- /usr/include/glib-2.0/gio/gio.h /usr/include/glib-2.0/gio/giotypes.h \
- /usr/include/glib-2.0/gio/gioenums.h /usr/include/glib-2.0/glib-object.h \
- /usr/include/glib-2.0/gobject/gbinding.h /usr/include/glib-2.0/glib.h \
- /usr/include/glib-2.0/glib/galloca.h /usr/include/glib-2.0/glib/gtypes.h \
- /usr/lib/glib-2.0/include/glibconfig.h \
- /usr/include/glib-2.0/glib/gmacros.h /usr/include/glib-2.0/glib/garray.h \
- /usr/include/glib-2.0/glib/gasyncqueue.h \
- /usr/include/glib-2.0/glib/gthread.h /usr/include/glib-2.0/glib/gerror.h \
- /usr/include/glib-2.0/glib/gquark.h /usr/include/glib-2.0/glib/gutils.h \
- /usr/include/glib-2.0/glib/gatomic.h \
- /usr/include/glib-2.0/glib/gbacktrace.h \
- /usr/include/glib-2.0/glib/gbase64.h \
- /usr/include/glib-2.0/glib/gbitlock.h \
- /usr/include/glib-2.0/glib/gbookmarkfile.h \
- /usr/include/glib-2.0/glib/gcache.h /usr/include/glib-2.0/glib/glist.h \
- /usr/include/glib-2.0/glib/gmem.h /usr/include/glib-2.0/glib/gslice.h \
- /usr/include/glib-2.0/glib/gchecksum.h \
- /usr/include/glib-2.0/glib/gcompletion.h \
- /usr/include/glib-2.0/glib/gconvert.h \
- /usr/include/glib-2.0/glib/gdataset.h /usr/include/glib-2.0/glib/gdate.h \
- /usr/include/glib-2.0/glib/gdatetime.h \
- /usr/include/glib-2.0/glib/gtimezone.h /usr/include/glib-2.0/glib/gdir.h \
- /usr/include/glib-2.0/glib/gfileutils.h \
- /usr/include/glib-2.0/glib/ghash.h /usr/include/glib-2.0/glib/ghook.h \
- /usr/include/glib-2.0/glib/ghostutils.h \
- /usr/include/glib-2.0/glib/giochannel.h \
- /usr/include/glib-2.0/glib/gmain.h /usr/include/glib-2.0/glib/gpoll.h \
- /usr/include/glib-2.0/glib/gslist.h /usr/include/glib-2.0/glib/gstring.h \
- /usr/include/glib-2.0/glib/gunicode.h \
- /usr/include/glib-2.0/glib/gkeyfile.h \
- /usr/include/glib-2.0/glib/gmappedfile.h \
- /usr/include/glib-2.0/glib/gmarkup.h \
- /usr/include/glib-2.0/glib/gmessages.h \
- /usr/include/glib-2.0/glib/gnode.h /usr/include/glib-2.0/glib/goption.h \
- /usr/include/glib-2.0/glib/gpattern.h \
- /usr/include/glib-2.0/glib/gprimes.h /usr/include/glib-2.0/glib/gqsort.h \
- /usr/include/glib-2.0/glib/gqueue.h /usr/include/glib-2.0/glib/grand.h \
- /usr/include/glib-2.0/glib/grel.h /usr/include/glib-2.0/glib/gregex.h \
- /usr/include/glib-2.0/glib/gscanner.h \
- /usr/include/glib-2.0/glib/gsequence.h \
- /usr/include/glib-2.0/glib/gshell.h /usr/include/glib-2.0/glib/gspawn.h \
- /usr/include/glib-2.0/glib/gstrfuncs.h \
- /usr/include/glib-2.0/glib/gtestutils.h \
- /usr/include/glib-2.0/glib/gthreadpool.h \
- /usr/include/glib-2.0/glib/gtimer.h /usr/include/glib-2.0/glib/gtree.h \
- /usr/include/glib-2.0/glib/gurifuncs.h \
- /usr/include/glib-2.0/glib/gvarianttype.h \
- /usr/include/glib-2.0/glib/gvariant.h \
- /usr/include/glib-2.0/gobject/gobject.h \
- /usr/include/glib-2.0/gobject/gtype.h \
- /usr/include/glib-2.0/gobject/gvalue.h \
- /usr/include/glib-2.0/gobject/gparam.h \
- /usr/include/glib-2.0/gobject/gclosure.h \
- /usr/include/glib-2.0/gobject/gsignal.h \
- /usr/include/glib-2.0/gobject/gmarshal.h \
- /usr/include/glib-2.0/gobject/gboxed.h \
- /usr/include/glib-2.0/gobject/genums.h \
- /usr/include/glib-2.0/gobject/gparamspecs.h \
- /usr/include/glib-2.0/gobject/gsourceclosure.h \
- /usr/include/glib-2.0/gobject/gtypemodule.h \
- /usr/include/glib-2.0/gobject/gtypeplugin.h \
- /usr/include/glib-2.0/gobject/gvaluearray.h \
- /usr/include/glib-2.0/gobject/gvaluetypes.h \
- /usr/include/glib-2.0/gio/gappinfo.h /usr/include/glib-2.0/gio/gaction.h \
- /usr/include/glib-2.0/gio/gsimpleaction.h \
- /usr/include/glib-2.0/gio/gactiongroup.h \
- /usr/include/glib-2.0/gio/gsimpleactiongroup.h \
- /usr/include/glib-2.0/gio/gactiongroup.h \
- /usr/include/glib-2.0/gio/gapplication.h \
- /usr/include/glib-2.0/gio/gapplicationcommandline.h \
- /usr/include/glib-2.0/gio/gasyncinitable.h \
- /usr/include/glib-2.0/gio/ginitable.h \
- /usr/include/glib-2.0/gio/gasyncresult.h \
- /usr/include/glib-2.0/gio/gbufferedinputstream.h \
- /usr/include/glib-2.0/gio/gfilterinputstream.h \
- /usr/include/glib-2.0/gio/ginputstream.h \
- /usr/include/glib-2.0/gio/gbufferedoutputstream.h \
- /usr/include/glib-2.0/gio/gfilteroutputstream.h \
- /usr/include/glib-2.0/gio/goutputstream.h \
- /usr/include/glib-2.0/gio/gcancellable.h \
- /usr/include/glib-2.0/gio/gcharsetconverter.h \
- /usr/include/glib-2.0/gio/gconverter.h \
- /usr/include/glib-2.0/gio/gcontenttype.h \
- /usr/include/glib-2.0/gio/gconverterinputstream.h \
- /usr/include/glib-2.0/gio/gconverteroutputstream.h \
- /usr/include/glib-2.0/gio/gcredentials.h \
- /usr/include/glib-2.0/gio/gdatainputstream.h \
- /usr/include/glib-2.0/gio/gdataoutputstream.h \
- /usr/include/glib-2.0/gio/gdbusaddress.h \
- /usr/include/glib-2.0/gio/gdbusauthobserver.h \
- /usr/include/glib-2.0/gio/gdbusconnection.h \
- /usr/include/glib-2.0/gio/gdbuserror.h \
- /usr/include/glib-2.0/gio/gdbusintrospection.h \
- /usr/include/glib-2.0/gio/gdbusmessage.h \
- /usr/include/glib-2.0/gio/gdbusmethodinvocation.h \
- /usr/include/glib-2.0/gio/gdbusnameowning.h \
- /usr/include/glib-2.0/gio/gdbusnamewatching.h \
- /usr/include/glib-2.0/gio/gdbusproxy.h \
- /usr/include/glib-2.0/gio/gdbusserver.h \
- /usr/include/glib-2.0/gio/gdbusutils.h \
- /usr/include/glib-2.0/gio/gdrive.h \
- /usr/include/glib-2.0/gio/gemblemedicon.h \
- /usr/include/glib-2.0/gio/gicon.h /usr/include/glib-2.0/gio/gemblem.h \
- /usr/include/glib-2.0/gio/gfileattribute.h \
- /usr/include/glib-2.0/gio/gfileenumerator.h \
- /usr/include/glib-2.0/gio/gfile.h /usr/include/glib-2.0/gio/gfileicon.h \
- /usr/include/glib-2.0/gio/gfileinfo.h \
- /usr/include/glib-2.0/gio/gfileinputstream.h \
- /usr/include/glib-2.0/gio/gfileiostream.h \
- /usr/include/glib-2.0/gio/giostream.h \
- /usr/include/glib-2.0/gio/gioerror.h \
- /usr/include/glib-2.0/gio/gfilemonitor.h \
- /usr/include/glib-2.0/gio/gfilenamecompleter.h \
- /usr/include/glib-2.0/gio/gfileoutputstream.h \
- /usr/include/glib-2.0/gio/ginetaddress.h \
- /usr/include/glib-2.0/gio/ginetsocketaddress.h \
- /usr/include/glib-2.0/gio/gsocketaddress.h \
- /usr/include/glib-2.0/gio/gioenumtypes.h \
- /usr/include/glib-2.0/gio/giomodule.h /usr/include/glib-2.0/gmodule.h \
- /usr/include/glib-2.0/gio/gioscheduler.h \
- /usr/include/glib-2.0/gio/gloadableicon.h \
- /usr/include/glib-2.0/gio/gmemoryinputstream.h \
- /usr/include/glib-2.0/gio/gmemoryoutputstream.h \
- /usr/include/glib-2.0/gio/gmount.h \
- /usr/include/glib-2.0/gio/gmountoperation.h \
- /usr/include/glib-2.0/gio/gnativevolumemonitor.h \
- /usr/include/glib-2.0/gio/gvolumemonitor.h \
- /usr/include/glib-2.0/gio/gnetworkaddress.h \
- /usr/include/glib-2.0/gio/gnetworkservice.h \
- /usr/include/glib-2.0/gio/gpermission.h \
- /usr/include/glib-2.0/gio/gpollableinputstream.h \
- /usr/include/glib-2.0/gio/gpollableoutputstream.h \
- /usr/include/glib-2.0/gio/gproxy.h \
- /usr/include/glib-2.0/gio/gproxyaddress.h \
- /usr/include/glib-2.0/gio/gproxyaddressenumerator.h \
- /usr/include/glib-2.0/gio/gsocketaddressenumerator.h \
- /usr/include/glib-2.0/gio/gproxyresolver.h \
- /usr/include/glib-2.0/gio/gresolver.h \
- /usr/include/glib-2.0/gio/gseekable.h \
- /usr/include/glib-2.0/gio/gsettings.h \
- /usr/include/glib-2.0/gio/gsimpleasyncresult.h \
- /usr/include/glib-2.0/gio/gsimplepermission.h \
- /usr/include/glib-2.0/gio/gsocketclient.h \
- /usr/include/glib-2.0/gio/gsocketconnectable.h \
- /usr/include/glib-2.0/gio/gsocketconnection.h \
- /usr/include/glib-2.0/gio/gsocket.h \
- /usr/include/glib-2.0/gio/gsocketcontrolmessage.h \
- /usr/include/glib-2.0/gio/gsocketlistener.h \
- /usr/include/glib-2.0/gio/gsocketservice.h \
- /usr/include/glib-2.0/gio/gsrvtarget.h \
- /usr/include/glib-2.0/gio/gtcpconnection.h \
- /usr/include/glib-2.0/gio/gtcpwrapperconnection.h \
- /usr/include/glib-2.0/gio/gthemedicon.h \
- /usr/include/glib-2.0/gio/gthreadedsocketservice.h \
- /usr/include/glib-2.0/gio/gtlsbackend.h \
- /usr/include/glib-2.0/gio/gtlscertificate.h \
- /usr/include/glib-2.0/gio/gtlsclientconnection.h \
- /usr/include/glib-2.0/gio/gtlsconnection.h \
- /usr/include/glib-2.0/gio/gtlsserverconnection.h \
- /usr/include/glib-2.0/gio/gvfs.h /usr/include/glib-2.0/gio/gvolume.h \
- /usr/include/glib-2.0/gio/gzlibcompressor.h \
- /usr/include/glib-2.0/gio/gzlibdecompressor.h \
- /usr/include/gtk-2.0/gdk/gdkscreen.h /usr/include/cairo/cairo.h \
- /usr/include/cairo/cairo-version.h /usr/include/cairo/cairo-features.h \
- /usr/include/cairo/cairo-deprecated.h \
- /usr/include/gtk-2.0/gdk/gdktypes.h /usr/include/pango-1.0/pango/pango.h \
- /usr/include/pango-1.0/pango/pango-attributes.h \
- /usr/include/pango-1.0/pango/pango-font.h \
- /usr/include/pango-1.0/pango/pango-coverage.h \
- /usr/include/pango-1.0/pango/pango-types.h \
- /usr/include/pango-1.0/pango/pango-gravity.h \
- /usr/include/pango-1.0/pango/pango-matrix.h \
- /usr/include/pango-1.0/pango/pango-script.h \
- /usr/include/pango-1.0/pango/pango-language.h \
- /usr/include/pango-1.0/pango/pango-bidi-type.h \
- /usr/include/pango-1.0/pango/pango-break.h \
- /usr/include/pango-1.0/pango/pango-item.h \
- /usr/include/pango-1.0/pango/pango-context.h \
- /usr/include/pango-1.0/pango/pango-fontmap.h \
- /usr/include/pango-1.0/pango/pango-fontset.h \
- /usr/include/pango-1.0/pango/pango-engine.h \
- /usr/include/pango-1.0/pango/pango-glyph.h \
- /usr/include/pango-1.0/pango/pango-enum-types.h \
- /usr/include/pango-1.0/pango/pango-features.h \
- /usr/include/pango-1.0/pango/pango-glyph-item.h \
- /usr/include/pango-1.0/pango/pango-layout.h \
- /usr/include/pango-1.0/pango/pango-tabs.h \
- /usr/include/pango-1.0/pango/pango-renderer.h \
- /usr/include/pango-1.0/pango/pango-utils.h \
- /usr/lib/gtk-2.0/include/gdkconfig.h \
- /usr/include/gtk-2.0/gdk/gdkdisplay.h \
- /usr/include/gtk-2.0/gdk/gdkevents.h /usr/include/gtk-2.0/gdk/gdkcolor.h \
- /usr/include/gtk-2.0/gdk/gdkdnd.h /usr/include/gtk-2.0/gdk/gdkinput.h \
- /usr/include/gtk-2.0/gdk/gdkcairo.h /usr/include/gtk-2.0/gdk/gdkpixbuf.h \
- /usr/include/gtk-2.0/gdk/gdkrgb.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-features.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-core.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-transform.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-animation.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-simple-anim.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-io.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-loader.h \
- /usr/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf-enum-types.h \
- /usr/include/pango-1.0/pango/pangocairo.h \
- /usr/include/gtk-2.0/gdk/gdkcursor.h \
- /usr/include/gtk-2.0/gdk/gdkdisplaymanager.h \
- /usr/include/gtk-2.0/gdk/gdkdrawable.h /usr/include/gtk-2.0/gdk/gdkgc.h \
- /usr/include/gtk-2.0/gdk/gdkenumtypes.h \
- /usr/include/gtk-2.0/gdk/gdkfont.h /usr/include/gtk-2.0/gdk/gdkimage.h \
- /usr/include/gtk-2.0/gdk/gdkkeys.h /usr/include/gtk-2.0/gdk/gdkpango.h \
- /usr/include/gtk-2.0/gdk/gdkpixmap.h \
- /usr/include/gtk-2.0/gdk/gdkproperty.h \
- /usr/include/gtk-2.0/gdk/gdkregion.h \
- /usr/include/gtk-2.0/gdk/gdkselection.h \
- /usr/include/gtk-2.0/gdk/gdkspawn.h \
- /usr/include/gtk-2.0/gdk/gdktestutils.h \
- /usr/include/gtk-2.0/gdk/gdkwindow.h \
- /usr/include/gtk-2.0/gdk/gdkvisual.h \
- /usr/include/gtk-2.0/gtk/gtkaccelgroup.h \
- /usr/include/gtk-2.0/gtk/gtkenums.h /usr/include/gtk-2.0/gtk/gtkobject.h \
- /usr/include/gtk-2.0/gtk/gtktypeutils.h \
- /usr/include/gtk-2.0/gtk/gtktypebuiltins.h \
- /usr/include/gtk-2.0/gtk/gtkdebug.h \
- /usr/include/gtk-2.0/gtk/gtkadjustment.h \
- /usr/include/gtk-2.0/gtk/gtkstyle.h \
- /usr/include/gtk-2.0/gtk/gtksettings.h /usr/include/gtk-2.0/gtk/gtkrc.h \
- /usr/include/atk-1.0/atk/atk.h /usr/include/atk-1.0/atk/atkobject.h \
- /usr/include/atk-1.0/atk/atkstate.h \
- /usr/include/atk-1.0/atk/atkrelationtype.h \
- /usr/include/atk-1.0/atk/atkaction.h \
- /usr/include/atk-1.0/atk/atkcomponent.h \
- /usr/include/atk-1.0/atk/atkutil.h \
- /usr/include/atk-1.0/atk/atkdocument.h \
- /usr/include/atk-1.0/atk/atkeditabletext.h \
- /usr/include/atk-1.0/atk/atktext.h \
- /usr/include/atk-1.0/atk/atkgobjectaccessible.h \
- /usr/include/atk-1.0/atk/atkhyperlink.h \
- /usr/include/atk-1.0/atk/atkhyperlinkimpl.h \
- /usr/include/atk-1.0/atk/atkhypertext.h \
- /usr/include/atk-1.0/atk/atkimage.h \
- /usr/include/atk-1.0/atk/atknoopobject.h \
- /usr/include/atk-1.0/atk/atknoopobjectfactory.h \
- /usr/include/atk-1.0/atk/atkobjectfactory.h \
- /usr/include/atk-1.0/atk/atkplug.h \
- /usr/include/atk-1.0/atk/atkregistry.h \
- /usr/include/atk-1.0/atk/atkobjectfactory.h \
- /usr/include/atk-1.0/atk/atkrelation.h \
- /usr/include/atk-1.0/atk/atkrelationset.h \
- /usr/include/atk-1.0/atk/atkselection.h \
- /usr/include/atk-1.0/atk/atksocket.h \
- /usr/include/atk-1.0/atk/atkstateset.h \
- /usr/include/atk-1.0/atk/atkstreamablecontent.h \
- /usr/include/atk-1.0/atk/atktable.h /usr/include/atk-1.0/atk/atkmisc.h \
- /usr/include/atk-1.0/atk/atkvalue.h sysdep.h
+gui.o: gui.c gui.h lazyfixed.h sysdep.h vlazyfixed.h client.h game.h \
+ tiles.h tiles-enums.h player.h player-enums.h protocol.h cmsg_union.h \
+ pmsg_union.h protocol-enums.h game-enums.h version.h gtkrc.h
+gui-dial.o: gui-dial.c gui.h lazyfixed.h sysdep.h vlazyfixed.h client.h \
+ game.h tiles.h tiles-enums.h player.h player-enums.h protocol.h \
+ cmsg_union.h pmsg_union.h protocol-enums.h game-enums.h version.h
+lazyfixed.o: lazyfixed.c lazyfixed.h sysdep.h
+vlazyfixed.o: vlazyfixed.c vlazyfixed.h sysdep.h
client.o: client.c sysdep.h client.h game.h tiles.h tiles-enums.h \
player.h player-enums.h protocol.h cmsg_union.h pmsg_union.h \
protocol-enums.h game-enums.h
--- /dev/null
+++ b/cmsg_size.c
@@ -0,0 +1,1332 @@
+static int cmsg_size[] = {
+-sizeof(CMsgErrorMsg),
+-sizeof(CMsgInfoTilesMsg),
+-sizeof(CMsgStateSavedMsg),
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-sizeof(CMsgConnectReplyMsg),
+sizeof(CMsgReconnectMsg),
+-sizeof(CMsgAuthReqdMsg),
+-sizeof(CMsgRedirectMsg),
+0,
+0,
+0,
+0,
+0,
+0,
+-sizeof(CMsgPlayerMsg),
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+sizeof(CMsgNewRoundMsg),
+sizeof(CMsgGameMsg),
+sizeof(CMsgNewHandMsg),
+0,
+0,
+sizeof(CMsgPlayerDeclaresSpecialMsg),
+sizeof(CMsgStartPlayMsg),
+-sizeof(CMsgStopPlayMsg),
+-sizeof(CMsgPauseMsg),
+sizeof(CMsgPlayerReadyMsg),
+0,
+sizeof(CMsgPlayerDrawsMsg),
+sizeof(CMsgPlayerDrawsLooseMsg),
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+sizeof(CMsgPlayerDiscardsMsg),
+-sizeof(CMsgClaimDeniedMsg),
+sizeof(CMsgPlayerDoesntClaimMsg),
+0,
+0,
+sizeof(CMsgDangerousDiscardMsg),
+0,
+0,
+0,
+0,
+sizeof(CMsgPlayerClaimsPungMsg),
+sizeof(CMsgPlayerPungsMsg),
+sizeof(CMsgPlayerFormsClosedPungMsg),
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+sizeof(CMsgPlayerClaimsKongMsg),
+sizeof(CMsgPlayerKongsMsg),
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+sizeof(CMsgPlayerDeclaresClosedKongMsg),
+sizeof(CMsgPlayerAddsToPungMsg),
+0,
+0,
+0,
+sizeof(CMsgPlayerRobsKongMsg),
+0,
+sizeof(CMsgCanMahJongMsg),
+0,
+0,
+sizeof(CMsgPlayerClaimsChowMsg),
+sizeof(CMsgPlayerChowsMsg),
+sizeof(CMsgPlayerFormsClosedChowMsg),
+0,
+0,
+0,
+0,
+0,
+0,
+-sizeof(CMsgWashOutMsg),
+sizeof(CMsgPlayerClaimsMahJongMsg),
+sizeof(CMsgPlayerMahJongsMsg),
+sizeof(CMsgPlayerPairsMsg),
+sizeof(CMsgPlayerFormsClosedPairMsg),
+0,
+-sizeof(CMsgPlayerShowsTilesMsg),
+-sizeof(CMsgPlayerSpecialSetMsg),
+-sizeof(CMsgPlayerFormsClosedSpecialSetMsg),
+0,
+0,
+-sizeof(CMsgPlayerOptionSetMsg),
+0,
+0,
+0,
+0,
+-sizeof(CMsgHandScoreMsg),
+0,
+0,
+0,
+0,
+-sizeof(CMsgSettlementMsg),
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+sizeof(CMsgGameOverMsg),
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+sizeof(CMsgGameOptionMsg),
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+sizeof(CMsgChangeManagerMsg),
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-sizeof(CMsgMessageMsg),
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-sizeof(CMsgWallMsg),
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-sizeof(CMsgCommentMsg),
+sizeof(CMsgSwapTileMsg),
+};
+
+int cmsg_size_of(ControllerMsgType t) { return cmsg_size[t]; }
+
+CMsgMsg *cmsg_deepcopy(CMsgMsg *m) {
+ CMsgMsg *n;
+ int size;
+ char *mc,*nc;
+
+ size = cmsg_size_of(m->type);
+ if ( size < 0 ) size *= -1;
+ n = (CMsgMsg *)malloc(size);
+ if ( ! n ) return n;
+
+ memcpy((void *)n,(const void *)m,size);
+ switch ( m->type ) {
+ case CMsgWashOut:
+ mc = ((CMsgWashOutMsg *)m)->reason;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((CMsgWashOutMsg *)n)->reason = nc;
+ break;
+ case CMsgSettlement:
+ mc = ((CMsgSettlementMsg *)m)->explanation;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((CMsgSettlementMsg *)n)->explanation = nc;
+ break;
+ case CMsgConnectReply:
+ mc = ((CMsgConnectReplyMsg *)m)->reason;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((CMsgConnectReplyMsg *)n)->reason = nc;
+ break;
+ case CMsgPlayerOptionSet:
+ mc = ((CMsgPlayerOptionSetMsg *)m)->text;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((CMsgPlayerOptionSetMsg *)n)->text = nc;
+ break;
+ case CMsgError:
+ mc = ((CMsgErrorMsg *)m)->error;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((CMsgErrorMsg *)n)->error = nc;
+ break;
+ case CMsgInfoTiles:
+ mc = ((CMsgInfoTilesMsg *)m)->tileinfo;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((CMsgInfoTilesMsg *)n)->tileinfo = nc;
+ break;
+ case CMsgRedirect:
+ mc = ((CMsgRedirectMsg *)m)->dest;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((CMsgRedirectMsg *)n)->dest = nc;
+ break;
+ case CMsgPlayerFormsClosedSpecialSet:
+ mc = ((CMsgPlayerFormsClosedSpecialSetMsg *)m)->tiles;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((CMsgPlayerFormsClosedSpecialSetMsg *)n)->tiles = nc;
+ break;
+ case CMsgMessage:
+ mc = ((CMsgMessageMsg *)m)->text;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((CMsgMessageMsg *)n)->text = nc;
+ break;
+ case CMsgAuthReqd:
+ mc = ((CMsgAuthReqdMsg *)m)->authdata;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((CMsgAuthReqdMsg *)n)->authdata = nc;
+ break;
+ case CMsgPause:
+ mc = ((CMsgPauseMsg *)m)->reason;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((CMsgPauseMsg *)n)->reason = nc;
+ break;
+ case CMsgStateSaved:
+ mc = ((CMsgStateSavedMsg *)m)->filename;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((CMsgStateSavedMsg *)n)->filename = nc;
+ break;
+ case CMsgWall:
+ mc = ((CMsgWallMsg *)m)->wall;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((CMsgWallMsg *)n)->wall = nc;
+ break;
+ case CMsgPlayerSpecialSet:
+ mc = ((CMsgPlayerSpecialSetMsg *)m)->tiles;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((CMsgPlayerSpecialSetMsg *)n)->tiles = nc;
+ break;
+ case CMsgPlayerShowsTiles:
+ mc = ((CMsgPlayerShowsTilesMsg *)m)->tiles;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((CMsgPlayerShowsTilesMsg *)n)->tiles = nc;
+ break;
+ case CMsgComment:
+ mc = ((CMsgCommentMsg *)m)->comment;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((CMsgCommentMsg *)n)->comment = nc;
+ break;
+ case CMsgPlayer:
+ mc = ((CMsgPlayerMsg *)m)->name;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((CMsgPlayerMsg *)n)->name = nc;
+ break;
+ case CMsgStopPlay:
+ mc = ((CMsgStopPlayMsg *)m)->reason;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((CMsgStopPlayMsg *)n)->reason = nc;
+ break;
+ case CMsgClaimDenied:
+ mc = ((CMsgClaimDeniedMsg *)m)->reason;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((CMsgClaimDeniedMsg *)n)->reason = nc;
+ break;
+ case CMsgHandScore:
+ mc = ((CMsgHandScoreMsg *)m)->explanation;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((CMsgHandScoreMsg *)n)->explanation = nc;
+ break;
+ default:
+ ;
+ }
+ return n;
+}
+
+void cmsg_deepfree(CMsgMsg *m) {
+ switch ( m->type ) {
+ case CMsgWashOut:
+ if ( ((CMsgWashOutMsg *)m)->reason )
+ free((void *)((CMsgWashOutMsg *)m)->reason);
+ break;
+ case CMsgSettlement:
+ if ( ((CMsgSettlementMsg *)m)->explanation )
+ free((void *)((CMsgSettlementMsg *)m)->explanation);
+ break;
+ case CMsgConnectReply:
+ if ( ((CMsgConnectReplyMsg *)m)->reason )
+ free((void *)((CMsgConnectReplyMsg *)m)->reason);
+ break;
+ case CMsgPlayerOptionSet:
+ if ( ((CMsgPlayerOptionSetMsg *)m)->text )
+ free((void *)((CMsgPlayerOptionSetMsg *)m)->text);
+ break;
+ case CMsgError:
+ if ( ((CMsgErrorMsg *)m)->error )
+ free((void *)((CMsgErrorMsg *)m)->error);
+ break;
+ case CMsgInfoTiles:
+ if ( ((CMsgInfoTilesMsg *)m)->tileinfo )
+ free((void *)((CMsgInfoTilesMsg *)m)->tileinfo);
+ break;
+ case CMsgRedirect:
+ if ( ((CMsgRedirectMsg *)m)->dest )
+ free((void *)((CMsgRedirectMsg *)m)->dest);
+ break;
+ case CMsgPlayerFormsClosedSpecialSet:
+ if ( ((CMsgPlayerFormsClosedSpecialSetMsg *)m)->tiles )
+ free((void *)((CMsgPlayerFormsClosedSpecialSetMsg *)m)->tiles);
+ break;
+ case CMsgMessage:
+ if ( ((CMsgMessageMsg *)m)->text )
+ free((void *)((CMsgMessageMsg *)m)->text);
+ break;
+ case CMsgAuthReqd:
+ if ( ((CMsgAuthReqdMsg *)m)->authdata )
+ free((void *)((CMsgAuthReqdMsg *)m)->authdata);
+ break;
+ case CMsgPause:
+ if ( ((CMsgPauseMsg *)m)->reason )
+ free((void *)((CMsgPauseMsg *)m)->reason);
+ break;
+ case CMsgStateSaved:
+ if ( ((CMsgStateSavedMsg *)m)->filename )
+ free((void *)((CMsgStateSavedMsg *)m)->filename);
+ break;
+ case CMsgWall:
+ if ( ((CMsgWallMsg *)m)->wall )
+ free((void *)((CMsgWallMsg *)m)->wall);
+ break;
+ case CMsgPlayerSpecialSet:
+ if ( ((CMsgPlayerSpecialSetMsg *)m)->tiles )
+ free((void *)((CMsgPlayerSpecialSetMsg *)m)->tiles);
+ break;
+ case CMsgPlayerShowsTiles:
+ if ( ((CMsgPlayerShowsTilesMsg *)m)->tiles )
+ free((void *)((CMsgPlayerShowsTilesMsg *)m)->tiles);
+ break;
+ case CMsgComment:
+ if ( ((CMsgCommentMsg *)m)->comment )
+ free((void *)((CMsgCommentMsg *)m)->comment);
+ break;
+ case CMsgPlayer:
+ if ( ((CMsgPlayerMsg *)m)->name )
+ free((void *)((CMsgPlayerMsg *)m)->name);
+ break;
+ case CMsgStopPlay:
+ if ( ((CMsgStopPlayMsg *)m)->reason )
+ free((void *)((CMsgStopPlayMsg *)m)->reason);
+ break;
+ case CMsgClaimDenied:
+ if ( ((CMsgClaimDeniedMsg *)m)->reason )
+ free((void *)((CMsgClaimDeniedMsg *)m)->reason);
+ break;
+ case CMsgHandScore:
+ if ( ((CMsgHandScoreMsg *)m)->explanation )
+ free((void *)((CMsgHandScoreMsg *)m)->explanation);
+ break;
+ default:
+ ;
+ }
+ free((void *)m);
+}
+
--- /dev/null
+++ b/cmsg_union.h
@@ -0,0 +1,57 @@
+typedef union _CMsgUnion {
+ /* Note that this type field relies on the fact that all
+ messages have type as their first field */
+ControllerMsgType type;
+CMsgErrorMsg error;
+CMsgInfoTilesMsg infotiles;
+CMsgStateSavedMsg statesaved;
+CMsgConnectReplyMsg connectreply;
+CMsgReconnectMsg reconnect;
+CMsgAuthReqdMsg authreqd;
+CMsgRedirectMsg redirect;
+CMsgPlayerMsg player;
+CMsgNewRoundMsg newround;
+CMsgGameMsg game;
+CMsgNewHandMsg newhand;
+CMsgPlayerDeclaresSpecialMsg playerdeclaresspecial;
+CMsgStartPlayMsg startplay;
+CMsgStopPlayMsg stopplay;
+CMsgPauseMsg pause;
+CMsgPlayerReadyMsg playerready;
+CMsgPlayerDrawsMsg playerdraws;
+CMsgPlayerDrawsLooseMsg playerdrawsloose;
+CMsgPlayerDiscardsMsg playerdiscards;
+CMsgClaimDeniedMsg claimdenied;
+CMsgPlayerDoesntClaimMsg playerdoesntclaim;
+CMsgDangerousDiscardMsg dangerousdiscard;
+CMsgPlayerClaimsPungMsg playerclaimspung;
+CMsgPlayerPungsMsg playerpungs;
+CMsgPlayerFormsClosedPungMsg playerformsclosedpung;
+CMsgPlayerClaimsKongMsg playerclaimskong;
+CMsgPlayerKongsMsg playerkongs;
+CMsgPlayerDeclaresClosedKongMsg playerdeclaresclosedkong;
+CMsgPlayerAddsToPungMsg playeraddstopung;
+CMsgPlayerRobsKongMsg playerrobskong;
+CMsgCanMahJongMsg canmahjong;
+CMsgPlayerClaimsChowMsg playerclaimschow;
+CMsgPlayerChowsMsg playerchows;
+CMsgPlayerFormsClosedChowMsg playerformsclosedchow;
+CMsgWashOutMsg washout;
+CMsgPlayerClaimsMahJongMsg playerclaimsmahjong;
+CMsgPlayerMahJongsMsg playermahjongs;
+CMsgPlayerPairsMsg playerpairs;
+CMsgPlayerFormsClosedPairMsg playerformsclosedpair;
+CMsgPlayerShowsTilesMsg playershowstiles;
+CMsgPlayerSpecialSetMsg playerspecialset;
+CMsgPlayerFormsClosedSpecialSetMsg playerformsclosedspecialset;
+CMsgPlayerOptionSetMsg playeroptionset;
+CMsgHandScoreMsg handscore;
+CMsgSettlementMsg settlement;
+CMsgGameOverMsg gameover;
+CMsgGameOptionMsg gameoption;
+CMsgChangeManagerMsg changemanager;
+CMsgMessageMsg message;
+CMsgWallMsg wall;
+CMsgCommentMsg comment;
+CMsgSwapTileMsg swaptile;
+} CMsgUnion;
--- /dev/null
+++ b/dec_cmsg.c
@@ -0,0 +1,1176 @@
+ if ( strcmp(type,"Error") == 0 ) {
+ CMsgErrorMsg *m;
+
+ m = (CMsgErrorMsg *)malloc(sizeof(CMsgErrorMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgError;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->seqno = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( strlen(s) == 0 ) m->error = (char *)0;
+ else {
+ m->error = (char *)malloc(strlen(s)+1);
+ if ( ! m->error ) { warn("malloc failed\n"); return (CMsgMsg *)0; }
+ strcpy(m->error,s+(s[0] == '\\'));
+ }
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"StateSaved") == 0 ) {
+ CMsgStateSavedMsg *m;
+
+ m = (CMsgStateSavedMsg *)malloc(sizeof(CMsgStateSavedMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgStateSaved;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( strlen(s) == 0 ) m->filename = (char *)0;
+ else {
+ m->filename = (char *)malloc(strlen(s)+1);
+ if ( ! m->filename ) { warn("malloc failed\n"); return (CMsgMsg *)0; }
+ strcpy(m->filename,s+(s[0] == '\\'));
+ }
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"InfoTiles") == 0 ) {
+ CMsgInfoTilesMsg *m;
+
+ m = (CMsgInfoTilesMsg *)malloc(sizeof(CMsgInfoTilesMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgInfoTiles;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( strlen(s) == 0 ) m->tileinfo = (char *)0;
+ else {
+ m->tileinfo = (char *)malloc(strlen(s)+1);
+ if ( ! m->tileinfo ) { warn("malloc failed\n"); return (CMsgMsg *)0; }
+ strcpy(m->tileinfo,s+(s[0] == '\\'));
+ }
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"ConnectReply") == 0 ) {
+ CMsgConnectReplyMsg *m;
+
+ m = (CMsgConnectReplyMsg *)malloc(sizeof(CMsgConnectReplyMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgConnectReply;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->pvers = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( strlen(s) == 0 ) m->reason = (char *)0;
+ else {
+ m->reason = (char *)malloc(strlen(s)+1);
+ if ( ! m->reason ) { warn("malloc failed\n"); return (CMsgMsg *)0; }
+ strcpy(m->reason,s+(s[0] == '\\'));
+ }
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"AuthReqd") == 0 ) {
+ CMsgAuthReqdMsg *m;
+
+ m = (CMsgAuthReqdMsg *)malloc(sizeof(CMsgAuthReqdMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgAuthReqd;
+
+ if ( sscanf(s,"%16s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ strmcpy(m->authtype,little_string,16);
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( strlen(s) == 0 ) m->authdata = (char *)0;
+ else {
+ m->authdata = (char *)malloc(strlen(s)+1);
+ if ( ! m->authdata ) { warn("malloc failed\n"); return (CMsgMsg *)0; }
+ strcpy(m->authdata,s+(s[0] == '\\'));
+ }
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"Redirect") == 0 ) {
+ CMsgRedirectMsg *m;
+
+ m = (CMsgRedirectMsg *)malloc(sizeof(CMsgRedirectMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgRedirect;
+
+ if ( strlen(s) == 0 ) m->dest = (char *)0;
+ else {
+ m->dest = (char *)malloc(strlen(s)+1);
+ if ( ! m->dest ) { warn("malloc failed\n"); return (CMsgMsg *)0; }
+ strcpy(m->dest,s+(s[0] == '\\'));
+ }
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"Reconnect") == 0 ) {
+ CMsgReconnectMsg *m;
+
+ m = (CMsgReconnectMsg *)malloc(sizeof(CMsgReconnectMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgReconnect;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"Player") == 0 ) {
+ CMsgPlayerMsg *m;
+
+ m = (CMsgPlayerMsg *)malloc(sizeof(CMsgPlayerMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPlayer;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( strlen(s) == 0 ) m->name = (char *)0;
+ else {
+ m->name = (char *)malloc(strlen(s)+1);
+ if ( ! m->name ) { warn("malloc failed\n"); return (CMsgMsg *)0; }
+ strcpy(m->name,s+(s[0] == '\\'));
+ }
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"Game") == 0 ) {
+ CMsgGameMsg *m;
+
+ m = (CMsgGameMsg *)malloc(sizeof(CMsgGameMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgGame;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->east = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->south = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->west = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->north = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%c%n",&a_char,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->round = letterwind(a_char);
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->hands_as_east = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->firsteast = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->east_score = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->south_score = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->west_score = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->north_score = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->protversion = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->manager = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"NewRound") == 0 ) {
+ CMsgNewRoundMsg *m;
+
+ m = (CMsgNewRoundMsg *)malloc(sizeof(CMsgNewRoundMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgNewRound;
+
+ if ( sscanf(s,"%c%n",&a_char,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->round = letterwind(a_char);
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"NewHand") == 0 ) {
+ CMsgNewHandMsg *m;
+
+ m = (CMsgNewHandMsg *)malloc(sizeof(CMsgNewHandMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgNewHand;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->east = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->start_wall = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->start_stack = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"PlayerDraws") == 0 ) {
+ CMsgPlayerDrawsMsg *m;
+
+ m = (CMsgPlayerDrawsMsg *)malloc(sizeof(CMsgPlayerDrawsMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPlayerDraws;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->tile = tile_decode(little_string);
+ if ( m->tile == ErrorTile ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"PlayerDrawsLoose") == 0 ) {
+ CMsgPlayerDrawsLooseMsg *m;
+
+ m = (CMsgPlayerDrawsLooseMsg *)malloc(sizeof(CMsgPlayerDrawsLooseMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPlayerDrawsLoose;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->tile = tile_decode(little_string);
+ if ( m->tile == ErrorTile ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"PlayerDeclaresSpecial") == 0 ) {
+ CMsgPlayerDeclaresSpecialMsg *m;
+
+ m = (CMsgPlayerDeclaresSpecialMsg *)malloc(sizeof(CMsgPlayerDeclaresSpecialMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPlayerDeclaresSpecial;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->tile = tile_decode(little_string);
+ if ( m->tile == ErrorTile ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"StartPlay") == 0 ) {
+ CMsgStartPlayMsg *m;
+
+ m = (CMsgStartPlayMsg *)malloc(sizeof(CMsgStartPlayMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgStartPlay;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"StopPlay") == 0 ) {
+ CMsgStopPlayMsg *m;
+
+ m = (CMsgStopPlayMsg *)malloc(sizeof(CMsgStopPlayMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgStopPlay;
+
+ if ( strlen(s) == 0 ) m->reason = (char *)0;
+ else {
+ m->reason = (char *)malloc(strlen(s)+1);
+ if ( ! m->reason ) { warn("malloc failed\n"); return (CMsgMsg *)0; }
+ strcpy(m->reason,s+(s[0] == '\\'));
+ }
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"Pause") == 0 ) {
+ CMsgPauseMsg *m;
+
+ m = (CMsgPauseMsg *)malloc(sizeof(CMsgPauseMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPause;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->exempt = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->requestor = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( strlen(s) == 0 ) m->reason = (char *)0;
+ else {
+ m->reason = (char *)malloc(strlen(s)+1);
+ if ( ! m->reason ) { warn("malloc failed\n"); return (CMsgMsg *)0; }
+ strcpy(m->reason,s+(s[0] == '\\'));
+ }
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"PlayerReady") == 0 ) {
+ CMsgPlayerReadyMsg *m;
+
+ m = (CMsgPlayerReadyMsg *)malloc(sizeof(CMsgPlayerReadyMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPlayerReady;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"PlayerDiscards") == 0 ) {
+ CMsgPlayerDiscardsMsg *m;
+
+ m = (CMsgPlayerDiscardsMsg *)malloc(sizeof(CMsgPlayerDiscardsMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPlayerDiscards;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->tile = tile_decode(little_string);
+ if ( m->tile == ErrorTile ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->discard = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ if ( an_int < 0 || an_int > 1 ) { warn("protocol error\n") ; return (CMsgMsg *)0; }
+ m->calling = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"PlayerDoesntClaim") == 0 ) {
+ CMsgPlayerDoesntClaimMsg *m;
+
+ m = (CMsgPlayerDoesntClaimMsg *)malloc(sizeof(CMsgPlayerDoesntClaimMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPlayerDoesntClaim;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->discard = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ if ( an_int < 0 || an_int > 1 ) { warn("protocol error\n") ; return (CMsgMsg *)0; }
+ m->timeout = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"DangerousDiscard") == 0 ) {
+ CMsgDangerousDiscardMsg *m;
+
+ m = (CMsgDangerousDiscardMsg *)malloc(sizeof(CMsgDangerousDiscardMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgDangerousDiscard;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->discard = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ if ( an_int < 0 || an_int > 1 ) { warn("protocol error\n") ; return (CMsgMsg *)0; }
+ m->nochoice = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"PlayerClaimsPung") == 0 ) {
+ CMsgPlayerClaimsPungMsg *m;
+
+ m = (CMsgPlayerClaimsPungMsg *)malloc(sizeof(CMsgPlayerClaimsPungMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPlayerClaimsPung;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->discard = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"ClaimDenied") == 0 ) {
+ CMsgClaimDeniedMsg *m;
+
+ m = (CMsgClaimDeniedMsg *)malloc(sizeof(CMsgClaimDeniedMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgClaimDenied;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( strlen(s) == 0 ) m->reason = (char *)0;
+ else {
+ m->reason = (char *)malloc(strlen(s)+1);
+ if ( ! m->reason ) { warn("malloc failed\n"); return (CMsgMsg *)0; }
+ strcpy(m->reason,s+(s[0] == '\\'));
+ }
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"PlayerPungs") == 0 ) {
+ CMsgPlayerPungsMsg *m;
+
+ m = (CMsgPlayerPungsMsg *)malloc(sizeof(CMsgPlayerPungsMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPlayerPungs;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->tile = tile_decode(little_string);
+ if ( m->tile == ErrorTile ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"PlayerFormsClosedPung") == 0 ) {
+ CMsgPlayerFormsClosedPungMsg *m;
+
+ m = (CMsgPlayerFormsClosedPungMsg *)malloc(sizeof(CMsgPlayerFormsClosedPungMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPlayerFormsClosedPung;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->tile = tile_decode(little_string);
+ if ( m->tile == ErrorTile ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"PlayerClaimsKong") == 0 ) {
+ CMsgPlayerClaimsKongMsg *m;
+
+ m = (CMsgPlayerClaimsKongMsg *)malloc(sizeof(CMsgPlayerClaimsKongMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPlayerClaimsKong;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->discard = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"PlayerKongs") == 0 ) {
+ CMsgPlayerKongsMsg *m;
+
+ m = (CMsgPlayerKongsMsg *)malloc(sizeof(CMsgPlayerKongsMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPlayerKongs;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->tile = tile_decode(little_string);
+ if ( m->tile == ErrorTile ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"PlayerDeclaresClosedKong") == 0 ) {
+ CMsgPlayerDeclaresClosedKongMsg *m;
+
+ m = (CMsgPlayerDeclaresClosedKongMsg *)malloc(sizeof(CMsgPlayerDeclaresClosedKongMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPlayerDeclaresClosedKong;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->tile = tile_decode(little_string);
+ if ( m->tile == ErrorTile ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->discard = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"PlayerAddsToPung") == 0 ) {
+ CMsgPlayerAddsToPungMsg *m;
+
+ m = (CMsgPlayerAddsToPungMsg *)malloc(sizeof(CMsgPlayerAddsToPungMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPlayerAddsToPung;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->tile = tile_decode(little_string);
+ if ( m->tile == ErrorTile ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->discard = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"PlayerRobsKong") == 0 ) {
+ CMsgPlayerRobsKongMsg *m;
+
+ m = (CMsgPlayerRobsKongMsg *)malloc(sizeof(CMsgPlayerRobsKongMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPlayerRobsKong;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->tile = tile_decode(little_string);
+ if ( m->tile == ErrorTile ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"CanMahJong") == 0 ) {
+ CMsgCanMahJongMsg *m;
+
+ m = (CMsgCanMahJongMsg *)malloc(sizeof(CMsgCanMahJongMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgCanMahJong;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->tile = tile_decode(little_string);
+ if ( m->tile == ErrorTile ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ if ( an_int < 0 || an_int > 1 ) { warn("protocol error\n") ; return (CMsgMsg *)0; }
+ m->answer = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"PlayerClaimsChow") == 0 ) {
+ CMsgPlayerClaimsChowMsg *m;
+
+ m = (CMsgPlayerClaimsChowMsg *)malloc(sizeof(CMsgPlayerClaimsChowMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPlayerClaimsChow;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->discard = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%31s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->cpos = string_cpos(little_string);
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"PlayerChows") == 0 ) {
+ CMsgPlayerChowsMsg *m;
+
+ m = (CMsgPlayerChowsMsg *)malloc(sizeof(CMsgPlayerChowsMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPlayerChows;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->tile = tile_decode(little_string);
+ if ( m->tile == ErrorTile ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%31s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->cpos = string_cpos(little_string);
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"PlayerFormsClosedChow") == 0 ) {
+ CMsgPlayerFormsClosedChowMsg *m;
+
+ m = (CMsgPlayerFormsClosedChowMsg *)malloc(sizeof(CMsgPlayerFormsClosedChowMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPlayerFormsClosedChow;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->tile = tile_decode(little_string);
+ if ( m->tile == ErrorTile ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"WashOut") == 0 ) {
+ CMsgWashOutMsg *m;
+
+ m = (CMsgWashOutMsg *)malloc(sizeof(CMsgWashOutMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgWashOut;
+
+ if ( strlen(s) == 0 ) m->reason = (char *)0;
+ else {
+ m->reason = (char *)malloc(strlen(s)+1);
+ if ( ! m->reason ) { warn("malloc failed\n"); return (CMsgMsg *)0; }
+ strcpy(m->reason,s+(s[0] == '\\'));
+ }
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"PlayerClaimsMahJong") == 0 ) {
+ CMsgPlayerClaimsMahJongMsg *m;
+
+ m = (CMsgPlayerClaimsMahJongMsg *)malloc(sizeof(CMsgPlayerClaimsMahJongMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPlayerClaimsMahJong;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->discard = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"PlayerMahJongs") == 0 ) {
+ CMsgPlayerMahJongsMsg *m;
+
+ m = (CMsgPlayerMahJongsMsg *)malloc(sizeof(CMsgPlayerMahJongsMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPlayerMahJongs;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->tile = tile_decode(little_string);
+ if ( m->tile == ErrorTile ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"PlayerPairs") == 0 ) {
+ CMsgPlayerPairsMsg *m;
+
+ m = (CMsgPlayerPairsMsg *)malloc(sizeof(CMsgPlayerPairsMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPlayerPairs;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->tile = tile_decode(little_string);
+ if ( m->tile == ErrorTile ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"PlayerFormsClosedPair") == 0 ) {
+ CMsgPlayerFormsClosedPairMsg *m;
+
+ m = (CMsgPlayerFormsClosedPairMsg *)malloc(sizeof(CMsgPlayerFormsClosedPairMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPlayerFormsClosedPair;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->tile = tile_decode(little_string);
+ if ( m->tile == ErrorTile ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"PlayerSpecialSet") == 0 ) {
+ CMsgPlayerSpecialSetMsg *m;
+
+ m = (CMsgPlayerSpecialSetMsg *)malloc(sizeof(CMsgPlayerSpecialSetMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPlayerSpecialSet;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->tile = tile_decode(little_string);
+ if ( m->tile == ErrorTile ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( strlen(s) == 0 ) m->tiles = (char *)0;
+ else {
+ m->tiles = (char *)malloc(strlen(s)+1);
+ if ( ! m->tiles ) { warn("malloc failed\n"); return (CMsgMsg *)0; }
+ strcpy(m->tiles,s+(s[0] == '\\'));
+ }
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"PlayerFormsClosedSpecialSet") == 0 ) {
+ CMsgPlayerFormsClosedSpecialSetMsg *m;
+
+ m = (CMsgPlayerFormsClosedSpecialSetMsg *)malloc(sizeof(CMsgPlayerFormsClosedSpecialSetMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPlayerFormsClosedSpecialSet;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( strlen(s) == 0 ) m->tiles = (char *)0;
+ else {
+ m->tiles = (char *)malloc(strlen(s)+1);
+ if ( ! m->tiles ) { warn("malloc failed\n"); return (CMsgMsg *)0; }
+ strcpy(m->tiles,s+(s[0] == '\\'));
+ }
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"PlayerShowsTiles") == 0 ) {
+ CMsgPlayerShowsTilesMsg *m;
+
+ m = (CMsgPlayerShowsTilesMsg *)malloc(sizeof(CMsgPlayerShowsTilesMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPlayerShowsTiles;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( strlen(s) == 0 ) m->tiles = (char *)0;
+ else {
+ m->tiles = (char *)malloc(strlen(s)+1);
+ if ( ! m->tiles ) { warn("malloc failed\n"); return (CMsgMsg *)0; }
+ strcpy(m->tiles,s+(s[0] == '\\'));
+ }
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"HandScore") == 0 ) {
+ CMsgHandScoreMsg *m;
+
+ m = (CMsgHandScoreMsg *)malloc(sizeof(CMsgHandScoreMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgHandScore;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->score = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( strlen(s) == 0 ) m->explanation = (char *)0;
+ else {
+ m->explanation = (char *)malloc(strlen(s)+1);
+ if ( ! m->explanation ) { warn("malloc failed\n"); return (CMsgMsg *)0; }
+ strcpy(m->explanation,s+(s[0] == '\\'));
+ }
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"Settlement") == 0 ) {
+ CMsgSettlementMsg *m;
+
+ m = (CMsgSettlementMsg *)malloc(sizeof(CMsgSettlementMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgSettlement;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->east = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->south = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->west = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->north = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( strlen(s) == 0 ) m->explanation = (char *)0;
+ else {
+ m->explanation = (char *)malloc(strlen(s)+1);
+ if ( ! m->explanation ) { warn("malloc failed\n"); return (CMsgMsg *)0; }
+ strcpy(m->explanation,s+(s[0] == '\\'));
+ }
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"PlayerOptionSet") == 0 ) {
+ CMsgPlayerOptionSetMsg *m;
+
+ m = (CMsgPlayerOptionSetMsg *)malloc(sizeof(CMsgPlayerOptionSetMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgPlayerOptionSet;
+
+ if ( sscanf(s,"%31s%n",little_string,&n) ==0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->option = player_scan_PlayerOption(little_string);
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ if ( an_int < 0 || an_int > 1 ) { warn("protocol error\n") ; return (CMsgMsg *)0; }
+ m->ack = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->value = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( strlen(s) == 0 ) m->text = (char *)0;
+ else {
+ m->text = (char *)malloc(strlen(s)+1);
+ if ( ! m->text ) { warn("malloc failed\n"); return (CMsgMsg *)0; }
+ strcpy(m->text,s+(s[0] == '\\'));
+ }
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"GameOver") == 0 ) {
+ CMsgGameOverMsg *m;
+
+ m = (CMsgGameOverMsg *)malloc(sizeof(CMsgGameOverMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgGameOver;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"GameOption") == 0 ) {
+ CMsgGameOptionMsg *m;
+
+ m = (CMsgGameOptionMsg *)malloc(sizeof(CMsgGameOptionMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgGameOption;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( (goe = protocol_scan_GameOptionEntry(s)) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ memcpy(&m->optentry,goe,sizeof(GameOptionEntry));
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"ChangeManager") == 0 ) {
+ CMsgChangeManagerMsg *m;
+
+ m = (CMsgChangeManagerMsg *)malloc(sizeof(CMsgChangeManagerMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgChangeManager;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->manager = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"Message") == 0 ) {
+ CMsgMessageMsg *m;
+
+ m = (CMsgMessageMsg *)malloc(sizeof(CMsgMessageMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgMessage;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->sender = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->addressee = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( strlen(s) == 0 ) m->text = (char *)0;
+ else {
+ m->text = (char *)malloc(strlen(s)+1);
+ if ( ! m->text ) { warn("malloc failed\n"); return (CMsgMsg *)0; }
+ strcpy(m->text,s+(s[0] == '\\'));
+ }
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"Wall") == 0 ) {
+ CMsgWallMsg *m;
+
+ m = (CMsgWallMsg *)malloc(sizeof(CMsgWallMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgWall;
+
+ if ( strlen(s) == 0 ) m->wall = (char *)0;
+ else {
+ m->wall = (char *)malloc(strlen(s)+1);
+ if ( ! m->wall ) { warn("malloc failed\n"); return (CMsgMsg *)0; }
+ strcpy(m->wall,s+(s[0] == '\\'));
+ }
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"Comment") == 0 || strcmp(type,"#") == 0 ) {
+ CMsgCommentMsg *m;
+
+ m = (CMsgCommentMsg *)malloc(sizeof(CMsgCommentMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgComment;
+
+ if ( strlen(s) == 0 ) m->comment = (char *)0;
+ else {
+ m->comment = (char *)malloc(strlen(s)+1);
+ if ( ! m->comment ) { warn("malloc failed\n"); return (CMsgMsg *)0; }
+ strcpy(m->comment,s+(s[0] == '\\'));
+ }
+ return (CMsgMsg *) m;
+ }
+ if ( strcmp(type,"SwapTile") == 0 ) {
+ CMsgSwapTileMsg *m;
+
+ m = (CMsgSwapTileMsg *)malloc(sizeof(CMsgSwapTileMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (CMsgMsg *)0; }
+
+ m->type = CMsgSwapTile;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->oldtile = tile_decode(little_string);
+ if ( m->oldtile == ErrorTile ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ m->newtile = tile_decode(little_string);
+ if ( m->newtile == ErrorTile ) { warn("protocol error\n"); return (CMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (CMsgMsg *) m;
+ }
--- /dev/null
+++ b/dec_pmsg.c
@@ -0,0 +1,557 @@
+ if ( strcmp(type,"SaveState") == 0 ) {
+ PMsgSaveStateMsg *m;
+
+ m = (PMsgSaveStateMsg *)malloc(sizeof(PMsgSaveStateMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgSaveState;
+
+ if ( strlen(s) == 0 ) m->filename = (char *)0;
+ else {
+ m->filename = (char *)malloc(strlen(s)+1);
+ if ( ! m->filename ) { warn("malloc failed\n"); return (PMsgMsg *)0; }
+ strcpy(m->filename,s+(s[0] == '\\'));
+ }
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"LoadState") == 0 ) {
+ PMsgLoadStateMsg *m;
+
+ m = (PMsgLoadStateMsg *)malloc(sizeof(PMsgLoadStateMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgLoadState;
+
+ if ( strlen(s) == 0 ) m->filename = (char *)0;
+ else {
+ m->filename = (char *)malloc(strlen(s)+1);
+ if ( ! m->filename ) { warn("malloc failed\n"); return (PMsgMsg *)0; }
+ strcpy(m->filename,s+(s[0] == '\\'));
+ }
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"Connect") == 0 ) {
+ PMsgConnectMsg *m;
+
+ m = (PMsgConnectMsg *)malloc(sizeof(PMsgConnectMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgConnect;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ m->pvers = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ m->last_id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( strlen(s) == 0 ) m->name = (char *)0;
+ else {
+ m->name = (char *)malloc(strlen(s)+1);
+ if ( ! m->name ) { warn("malloc failed\n"); return (PMsgMsg *)0; }
+ strcpy(m->name,s+(s[0] == '\\'));
+ }
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"AuthInfo") == 0 ) {
+ PMsgAuthInfoMsg *m;
+
+ m = (PMsgAuthInfoMsg *)malloc(sizeof(PMsgAuthInfoMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgAuthInfo;
+
+ if ( sscanf(s,"%16s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ strmcpy(m->authtype,little_string,16);
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( strlen(s) == 0 ) m->authdata = (char *)0;
+ else {
+ m->authdata = (char *)malloc(strlen(s)+1);
+ if ( ! m->authdata ) { warn("malloc failed\n"); return (PMsgMsg *)0; }
+ strcpy(m->authdata,s+(s[0] == '\\'));
+ }
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"NewAuthInfo") == 0 ) {
+ PMsgNewAuthInfoMsg *m;
+
+ m = (PMsgNewAuthInfoMsg *)malloc(sizeof(PMsgNewAuthInfoMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgNewAuthInfo;
+
+ if ( sscanf(s,"%16s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ strmcpy(m->authtype,little_string,16);
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( strlen(s) == 0 ) m->authdata = (char *)0;
+ else {
+ m->authdata = (char *)malloc(strlen(s)+1);
+ if ( ! m->authdata ) { warn("malloc failed\n"); return (PMsgMsg *)0; }
+ strcpy(m->authdata,s+(s[0] == '\\'));
+ }
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"RequestReconnect") == 0 ) {
+ PMsgRequestReconnectMsg *m;
+
+ m = (PMsgRequestReconnectMsg *)malloc(sizeof(PMsgRequestReconnectMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgRequestReconnect;
+
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"Disconnect") == 0 ) {
+ PMsgDisconnectMsg *m;
+
+ m = (PMsgDisconnectMsg *)malloc(sizeof(PMsgDisconnectMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgDisconnect;
+
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"DeclareSpecial") == 0 || strcmp(type,"ds") == 0 ) {
+ PMsgDeclareSpecialMsg *m;
+
+ m = (PMsgDeclareSpecialMsg *)malloc(sizeof(PMsgDeclareSpecialMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgDeclareSpecial;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ m->tile = tile_decode(little_string);
+ if ( m->tile == ErrorTile ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"RequestPause") == 0 ) {
+ PMsgRequestPauseMsg *m;
+
+ m = (PMsgRequestPauseMsg *)malloc(sizeof(PMsgRequestPauseMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgRequestPause;
+
+ if ( strlen(s) == 0 ) m->reason = (char *)0;
+ else {
+ m->reason = (char *)malloc(strlen(s)+1);
+ if ( ! m->reason ) { warn("malloc failed\n"); return (PMsgMsg *)0; }
+ strcpy(m->reason,s+(s[0] == '\\'));
+ }
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"Ready") == 0 ) {
+ PMsgReadyMsg *m;
+
+ m = (PMsgReadyMsg *)malloc(sizeof(PMsgReadyMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgReady;
+
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"Discard") == 0 || strcmp(type,"d") == 0 ) {
+ PMsgDiscardMsg *m;
+
+ m = (PMsgDiscardMsg *)malloc(sizeof(PMsgDiscardMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgDiscard;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ m->tile = tile_decode(little_string);
+ if ( m->tile == ErrorTile ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ if ( an_int < 0 || an_int > 1 ) { warn("protocol error\n") ; return (PMsgMsg *)0; }
+ m->calling = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"NoClaim") == 0 || strcmp(type,"n") == 0 ) {
+ PMsgNoClaimMsg *m;
+
+ m = (PMsgNoClaimMsg *)malloc(sizeof(PMsgNoClaimMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgNoClaim;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ m->discard = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"Pung") == 0 || strcmp(type,"p") == 0 ) {
+ PMsgPungMsg *m;
+
+ m = (PMsgPungMsg *)malloc(sizeof(PMsgPungMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgPung;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ m->discard = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"FormClosedPung") == 0 ) {
+ PMsgFormClosedPungMsg *m;
+
+ m = (PMsgFormClosedPungMsg *)malloc(sizeof(PMsgFormClosedPungMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgFormClosedPung;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ m->tile = tile_decode(little_string);
+ if ( m->tile == ErrorTile ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"Kong") == 0 || strcmp(type,"k") == 0 ) {
+ PMsgKongMsg *m;
+
+ m = (PMsgKongMsg *)malloc(sizeof(PMsgKongMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgKong;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ m->discard = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"DeclareClosedKong") == 0 || strcmp(type,"ck") == 0 ) {
+ PMsgDeclareClosedKongMsg *m;
+
+ m = (PMsgDeclareClosedKongMsg *)malloc(sizeof(PMsgDeclareClosedKongMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgDeclareClosedKong;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ m->tile = tile_decode(little_string);
+ if ( m->tile == ErrorTile ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"AddToPung") == 0 ) {
+ PMsgAddToPungMsg *m;
+
+ m = (PMsgAddToPungMsg *)malloc(sizeof(PMsgAddToPungMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgAddToPung;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ m->tile = tile_decode(little_string);
+ if ( m->tile == ErrorTile ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"QueryMahJong") == 0 ) {
+ PMsgQueryMahJongMsg *m;
+
+ m = (PMsgQueryMahJongMsg *)malloc(sizeof(PMsgQueryMahJongMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgQueryMahJong;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ m->tile = tile_decode(little_string);
+ if ( m->tile == ErrorTile ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"Chow") == 0 || strcmp(type,"c") == 0 ) {
+ PMsgChowMsg *m;
+
+ m = (PMsgChowMsg *)malloc(sizeof(PMsgChowMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgChow;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ m->discard = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%31s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ m->cpos = string_cpos(little_string);
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"FormClosedChow") == 0 ) {
+ PMsgFormClosedChowMsg *m;
+
+ m = (PMsgFormClosedChowMsg *)malloc(sizeof(PMsgFormClosedChowMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgFormClosedChow;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ m->tile = tile_decode(little_string);
+ if ( m->tile == ErrorTile ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"DeclareWashOut") == 0 ) {
+ PMsgDeclareWashOutMsg *m;
+
+ m = (PMsgDeclareWashOutMsg *)malloc(sizeof(PMsgDeclareWashOutMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgDeclareWashOut;
+
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"MahJong") == 0 ) {
+ PMsgMahJongMsg *m;
+
+ m = (PMsgMahJongMsg *)malloc(sizeof(PMsgMahJongMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgMahJong;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ m->discard = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"Pair") == 0 ) {
+ PMsgPairMsg *m;
+
+ m = (PMsgPairMsg *)malloc(sizeof(PMsgPairMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgPair;
+
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"FormClosedPair") == 0 ) {
+ PMsgFormClosedPairMsg *m;
+
+ m = (PMsgFormClosedPairMsg *)malloc(sizeof(PMsgFormClosedPairMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgFormClosedPair;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ m->tile = tile_decode(little_string);
+ if ( m->tile == ErrorTile ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"SpecialSet") == 0 ) {
+ PMsgSpecialSetMsg *m;
+
+ m = (PMsgSpecialSetMsg *)malloc(sizeof(PMsgSpecialSetMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgSpecialSet;
+
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"FormClosedSpecialSet") == 0 ) {
+ PMsgFormClosedSpecialSetMsg *m;
+
+ m = (PMsgFormClosedSpecialSetMsg *)malloc(sizeof(PMsgFormClosedSpecialSetMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgFormClosedSpecialSet;
+
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"ShowTiles") == 0 ) {
+ PMsgShowTilesMsg *m;
+
+ m = (PMsgShowTilesMsg *)malloc(sizeof(PMsgShowTilesMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgShowTiles;
+
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"SetPlayerOption") == 0 ) {
+ PMsgSetPlayerOptionMsg *m;
+
+ m = (PMsgSetPlayerOptionMsg *)malloc(sizeof(PMsgSetPlayerOptionMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgSetPlayerOption;
+
+ if ( sscanf(s,"%31s%n",little_string,&n) ==0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ m->option = player_scan_PlayerOption(little_string);
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ if ( an_int < 0 || an_int > 1 ) { warn("protocol error\n") ; return (PMsgMsg *)0; }
+ m->ack = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ m->value = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( strlen(s) == 0 ) m->text = (char *)0;
+ else {
+ m->text = (char *)malloc(strlen(s)+1);
+ if ( ! m->text ) { warn("malloc failed\n"); return (PMsgMsg *)0; }
+ strcpy(m->text,s+(s[0] == '\\'));
+ }
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"SetGameOption") == 0 ) {
+ PMsgSetGameOptionMsg *m;
+
+ m = (PMsgSetGameOptionMsg *)malloc(sizeof(PMsgSetGameOptionMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgSetGameOption;
+
+ if ( sscanf(s,"%16s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ strmcpy(m->optname,little_string,16);
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( strlen(s) == 0 ) m->optvalue = (char *)0;
+ else {
+ m->optvalue = (char *)malloc(strlen(s)+1);
+ if ( ! m->optvalue ) { warn("malloc failed\n"); return (PMsgMsg *)0; }
+ strcpy(m->optvalue,s+(s[0] == '\\'));
+ }
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"QueryGameOption") == 0 ) {
+ PMsgQueryGameOptionMsg *m;
+
+ m = (PMsgQueryGameOptionMsg *)malloc(sizeof(PMsgQueryGameOptionMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgQueryGameOption;
+
+ if ( sscanf(s,"%16s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ strmcpy(m->optname,little_string,16);
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"ListGameOptions") == 0 ) {
+ PMsgListGameOptionsMsg *m;
+
+ m = (PMsgListGameOptionsMsg *)malloc(sizeof(PMsgListGameOptionsMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgListGameOptions;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ if ( an_int < 0 || an_int > 1 ) { warn("protocol error\n") ; return (PMsgMsg *)0; }
+ m->include_disabled = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"ChangeManager") == 0 ) {
+ PMsgChangeManagerMsg *m;
+
+ m = (PMsgChangeManagerMsg *)malloc(sizeof(PMsgChangeManagerMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgChangeManager;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ m->manager = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"SendMessage") == 0 ) {
+ PMsgSendMessageMsg *m;
+
+ m = (PMsgSendMessageMsg *)malloc(sizeof(PMsgSendMessageMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgSendMessage;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ m->addressee = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( strlen(s) == 0 ) m->text = (char *)0;
+ else {
+ m->text = (char *)malloc(strlen(s)+1);
+ if ( ! m->text ) { warn("malloc failed\n"); return (PMsgMsg *)0; }
+ strcpy(m->text,s+(s[0] == '\\'));
+ }
+ return (PMsgMsg *) m;
+ }
+ if ( strcmp(type,"SwapTile") == 0 || strcmp(type,"st") == 0 ) {
+ PMsgSwapTileMsg *m;
+
+ m = (PMsgSwapTileMsg *)malloc(sizeof(PMsgSwapTileMsg));
+ if ( ! m ) { warn("malloc failed\n") ; return (PMsgMsg *)0; }
+
+ m->type = PMsgSwapTile;
+
+ if ( sscanf(s,"%d%n",&an_int,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ m->id = an_int;
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ m->oldtile = tile_decode(little_string);
+ if ( m->oldtile == ErrorTile ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ if ( sscanf(s,"%2s%n",little_string,&n) == 0 ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ m->newtile = tile_decode(little_string);
+ if ( m->newtile == ErrorTile ) { warn("protocol error\n"); return (PMsgMsg *)0; }
+ s += n;
+ while ( isspace(*s) ) s++;
+
+ return (PMsgMsg *) m;
+ }
--- /dev/null
+++ b/enc_cmsg.c
@@ -0,0 +1,790 @@
+ case CMsgError:
+ { CMsgErrorMsg *m UNUSED = (CMsgErrorMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"Error %d %s%s\r\n", m->seqno,(m->error && (m->error[0] == ' ' || m->error[0] == '\\')) ? "\\" : "", m->error ? m->error : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgStateSaved:
+ { CMsgStateSavedMsg *m UNUSED = (CMsgStateSavedMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"StateSaved %d %s%s\r\n", m->id,(m->filename && (m->filename[0] == ' ' || m->filename[0] == '\\')) ? "\\" : "", m->filename ? m->filename : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgInfoTiles:
+ { CMsgInfoTilesMsg *m UNUSED = (CMsgInfoTilesMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"InfoTiles %d %s%s\r\n", m->id,(m->tileinfo && (m->tileinfo[0] == ' ' || m->tileinfo[0] == '\\')) ? "\\" : "", m->tileinfo ? m->tileinfo : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgConnectReply:
+ { CMsgConnectReplyMsg *m UNUSED = (CMsgConnectReplyMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"ConnectReply %d %d %s%s\r\n", m->pvers, m->id,(m->reason && (m->reason[0] == ' ' || m->reason[0] == '\\')) ? "\\" : "", m->reason ? m->reason : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgAuthReqd:
+ { CMsgAuthReqdMsg *m UNUSED = (CMsgAuthReqdMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"AuthReqd %s %s%s\r\n", m->authtype ,(m->authdata && (m->authdata[0] == ' ' || m->authdata[0] == '\\')) ? "\\" : "", m->authdata ? m->authdata : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgRedirect:
+ { CMsgRedirectMsg *m UNUSED = (CMsgRedirectMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"Redirect %s%s\r\n",(m->dest && (m->dest[0] == ' ' || m->dest[0] == '\\')) ? "\\" : "", m->dest ? m->dest : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgReconnect:
+ { CMsgReconnectMsg *m UNUSED = (CMsgReconnectMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"Reconnect\r\n");
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPlayer:
+ { CMsgPlayerMsg *m UNUSED = (CMsgPlayerMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"Player %d %s%s\r\n", m->id,(m->name && (m->name[0] == ' ' || m->name[0] == '\\')) ? "\\" : "", m->name ? m->name : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgGame:
+ { CMsgGameMsg *m UNUSED = (CMsgGameMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"Game %d %d %d %d %c %d %d %d %d %d %d %d %d\r\n", m->east, m->south, m->west, m->north, windletter(m->round), m->hands_as_east, m->firsteast, m->east_score, m->south_score, m->west_score, m->north_score, m->protversion, m->manager);
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgNewRound:
+ { CMsgNewRoundMsg *m UNUSED = (CMsgNewRoundMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"NewRound %c\r\n", windletter(m->round));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgNewHand:
+ { CMsgNewHandMsg *m UNUSED = (CMsgNewHandMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"NewHand %d %d %d\r\n", m->east, m->start_wall, m->start_stack);
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPlayerDraws:
+ { CMsgPlayerDrawsMsg *m UNUSED = (CMsgPlayerDrawsMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"PlayerDraws %d %s\r\n", m->id, tile_code(m->tile));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPlayerDrawsLoose:
+ { CMsgPlayerDrawsLooseMsg *m UNUSED = (CMsgPlayerDrawsLooseMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"PlayerDrawsLoose %d %s\r\n", m->id, tile_code(m->tile));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPlayerDeclaresSpecial:
+ { CMsgPlayerDeclaresSpecialMsg *m UNUSED = (CMsgPlayerDeclaresSpecialMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"PlayerDeclaresSpecial %d %s\r\n", m->id, tile_code(m->tile));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgStartPlay:
+ { CMsgStartPlayMsg *m UNUSED = (CMsgStartPlayMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"StartPlay %d\r\n", m->id);
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgStopPlay:
+ { CMsgStopPlayMsg *m UNUSED = (CMsgStopPlayMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"StopPlay %s%s\r\n",(m->reason && (m->reason[0] == ' ' || m->reason[0] == '\\')) ? "\\" : "", m->reason ? m->reason : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPause:
+ { CMsgPauseMsg *m UNUSED = (CMsgPauseMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"Pause %d %d %s%s\r\n", m->exempt, m->requestor,(m->reason && (m->reason[0] == ' ' || m->reason[0] == '\\')) ? "\\" : "", m->reason ? m->reason : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPlayerReady:
+ { CMsgPlayerReadyMsg *m UNUSED = (CMsgPlayerReadyMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"PlayerReady %d\r\n", m->id);
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPlayerDiscards:
+ { CMsgPlayerDiscardsMsg *m UNUSED = (CMsgPlayerDiscardsMsg *) msg;
+ badfield = 0;
+ if ( m->calling < 0 || m->calling > 1 ) { warn("bad boolean in message, assuming TRUE"); badfield = 1 ; };
+ while (1) {
+ int size = snprintf(buf,buf_size,"PlayerDiscards %d %s %d %d\r\n", m->id, tile_code(m->tile), m->discard, (badfield ? 1 : m->calling));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPlayerDoesntClaim:
+ { CMsgPlayerDoesntClaimMsg *m UNUSED = (CMsgPlayerDoesntClaimMsg *) msg;
+ badfield = 0;
+ if ( m->timeout < 0 || m->timeout > 1 ) { warn("bad boolean in message, assuming TRUE"); badfield = 1 ; };
+ while (1) {
+ int size = snprintf(buf,buf_size,"PlayerDoesntClaim %d %d %d\r\n", m->id, m->discard, (badfield ? 1 : m->timeout));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgDangerousDiscard:
+ { CMsgDangerousDiscardMsg *m UNUSED = (CMsgDangerousDiscardMsg *) msg;
+ badfield = 0;
+ if ( m->nochoice < 0 || m->nochoice > 1 ) { warn("bad boolean in message, assuming TRUE"); badfield = 1 ; };
+ while (1) {
+ int size = snprintf(buf,buf_size,"DangerousDiscard %d %d %d\r\n", m->id, m->discard, (badfield ? 1 : m->nochoice));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPlayerClaimsPung:
+ { CMsgPlayerClaimsPungMsg *m UNUSED = (CMsgPlayerClaimsPungMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"PlayerClaimsPung %d %d\r\n", m->id, m->discard);
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgClaimDenied:
+ { CMsgClaimDeniedMsg *m UNUSED = (CMsgClaimDeniedMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"ClaimDenied %d %s%s\r\n", m->id,(m->reason && (m->reason[0] == ' ' || m->reason[0] == '\\')) ? "\\" : "", m->reason ? m->reason : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPlayerPungs:
+ { CMsgPlayerPungsMsg *m UNUSED = (CMsgPlayerPungsMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"PlayerPungs %d %s\r\n", m->id, tile_code(m->tile));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPlayerFormsClosedPung:
+ { CMsgPlayerFormsClosedPungMsg *m UNUSED = (CMsgPlayerFormsClosedPungMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"PlayerFormsClosedPung %d %s\r\n", m->id, tile_code(m->tile));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPlayerClaimsKong:
+ { CMsgPlayerClaimsKongMsg *m UNUSED = (CMsgPlayerClaimsKongMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"PlayerClaimsKong %d %d\r\n", m->id, m->discard);
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPlayerKongs:
+ { CMsgPlayerKongsMsg *m UNUSED = (CMsgPlayerKongsMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"PlayerKongs %d %s\r\n", m->id, tile_code(m->tile));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPlayerDeclaresClosedKong:
+ { CMsgPlayerDeclaresClosedKongMsg *m UNUSED = (CMsgPlayerDeclaresClosedKongMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"PlayerDeclaresClosedKong %d %s %d\r\n", m->id, tile_code(m->tile), m->discard);
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPlayerAddsToPung:
+ { CMsgPlayerAddsToPungMsg *m UNUSED = (CMsgPlayerAddsToPungMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"PlayerAddsToPung %d %s %d\r\n", m->id, tile_code(m->tile), m->discard);
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPlayerRobsKong:
+ { CMsgPlayerRobsKongMsg *m UNUSED = (CMsgPlayerRobsKongMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"PlayerRobsKong %d %s\r\n", m->id, tile_code(m->tile));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgCanMahJong:
+ { CMsgCanMahJongMsg *m UNUSED = (CMsgCanMahJongMsg *) msg;
+ badfield = 0;
+ if ( m->answer < 0 || m->answer > 1 ) { warn("bad boolean in message, assuming TRUE"); badfield = 1 ; };
+ while (1) {
+ int size = snprintf(buf,buf_size,"CanMahJong %s %d\r\n", tile_code(m->tile), (badfield ? 1 : m->answer));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPlayerClaimsChow:
+ { CMsgPlayerClaimsChowMsg *m UNUSED = (CMsgPlayerClaimsChowMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"PlayerClaimsChow %d %d %s\r\n", m->id, m->discard, cpos_string(m->cpos));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPlayerChows:
+ { CMsgPlayerChowsMsg *m UNUSED = (CMsgPlayerChowsMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"PlayerChows %d %s %s\r\n", m->id, tile_code(m->tile), cpos_string(m->cpos));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPlayerFormsClosedChow:
+ { CMsgPlayerFormsClosedChowMsg *m UNUSED = (CMsgPlayerFormsClosedChowMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"PlayerFormsClosedChow %d %s\r\n", m->id, tile_code(m->tile));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgWashOut:
+ { CMsgWashOutMsg *m UNUSED = (CMsgWashOutMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"WashOut %s%s\r\n",(m->reason && (m->reason[0] == ' ' || m->reason[0] == '\\')) ? "\\" : "", m->reason ? m->reason : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPlayerClaimsMahJong:
+ { CMsgPlayerClaimsMahJongMsg *m UNUSED = (CMsgPlayerClaimsMahJongMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"PlayerClaimsMahJong %d %d\r\n", m->id, m->discard);
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPlayerMahJongs:
+ { CMsgPlayerMahJongsMsg *m UNUSED = (CMsgPlayerMahJongsMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"PlayerMahJongs %d %s\r\n", m->id, tile_code(m->tile));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPlayerPairs:
+ { CMsgPlayerPairsMsg *m UNUSED = (CMsgPlayerPairsMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"PlayerPairs %d %s\r\n", m->id, tile_code(m->tile));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPlayerFormsClosedPair:
+ { CMsgPlayerFormsClosedPairMsg *m UNUSED = (CMsgPlayerFormsClosedPairMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"PlayerFormsClosedPair %d %s\r\n", m->id, tile_code(m->tile));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPlayerSpecialSet:
+ { CMsgPlayerSpecialSetMsg *m UNUSED = (CMsgPlayerSpecialSetMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"PlayerSpecialSet %d %s %s%s\r\n", m->id, tile_code(m->tile),(m->tiles && (m->tiles[0] == ' ' || m->tiles[0] == '\\')) ? "\\" : "", m->tiles ? m->tiles : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPlayerFormsClosedSpecialSet:
+ { CMsgPlayerFormsClosedSpecialSetMsg *m UNUSED = (CMsgPlayerFormsClosedSpecialSetMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"PlayerFormsClosedSpecialSet %d %s%s\r\n", m->id,(m->tiles && (m->tiles[0] == ' ' || m->tiles[0] == '\\')) ? "\\" : "", m->tiles ? m->tiles : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPlayerShowsTiles:
+ { CMsgPlayerShowsTilesMsg *m UNUSED = (CMsgPlayerShowsTilesMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"PlayerShowsTiles %d %s%s\r\n", m->id,(m->tiles && (m->tiles[0] == ' ' || m->tiles[0] == '\\')) ? "\\" : "", m->tiles ? m->tiles : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgHandScore:
+ { CMsgHandScoreMsg *m UNUSED = (CMsgHandScoreMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"HandScore %d %d %s%s\r\n", m->id, m->score,(m->explanation && (m->explanation[0] == ' ' || m->explanation[0] == '\\')) ? "\\" : "", m->explanation ? m->explanation : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgSettlement:
+ { CMsgSettlementMsg *m UNUSED = (CMsgSettlementMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"Settlement %d %d %d %d %s%s\r\n", m->east, m->south, m->west, m->north,(m->explanation && (m->explanation[0] == ' ' || m->explanation[0] == '\\')) ? "\\" : "", m->explanation ? m->explanation : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgPlayerOptionSet:
+ { CMsgPlayerOptionSetMsg *m UNUSED = (CMsgPlayerOptionSetMsg *) msg;
+ badfield = 0;
+ if ( m->ack < 0 || m->ack > 1 ) { warn("bad boolean in message, assuming TRUE"); badfield = 1 ; };
+ while (1) {
+ int size = snprintf(buf,buf_size,"PlayerOptionSet %s %d %d %s%s\r\n", player_print_PlayerOption(m->option), (badfield ? 1 : m->ack), m->value,(m->text && (m->text[0] == ' ' || m->text[0] == '\\')) ? "\\" : "", m->text ? m->text : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgGameOver:
+ { CMsgGameOverMsg *m UNUSED = (CMsgGameOverMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"GameOver\r\n");
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgGameOption:
+ { CMsgGameOptionMsg *m UNUSED = (CMsgGameOptionMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"GameOption %d %s\r\n", m->id, protocol_print_GameOptionEntry(&m->optentry));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgChangeManager:
+ { CMsgChangeManagerMsg *m UNUSED = (CMsgChangeManagerMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"ChangeManager %d %d\r\n", m->id, m->manager);
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgMessage:
+ { CMsgMessageMsg *m UNUSED = (CMsgMessageMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"Message %d %d %s%s\r\n", m->sender, m->addressee,(m->text && (m->text[0] == ' ' || m->text[0] == '\\')) ? "\\" : "", m->text ? m->text : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgWall:
+ { CMsgWallMsg *m UNUSED = (CMsgWallMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"Wall %s%s\r\n",(m->wall && (m->wall[0] == ' ' || m->wall[0] == '\\')) ? "\\" : "", m->wall ? m->wall : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgComment:
+ { CMsgCommentMsg *m UNUSED = (CMsgCommentMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"# %s%s\r\n",(m->comment && (m->comment[0] == ' ' || m->comment[0] == '\\')) ? "\\" : "", m->comment ? m->comment : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case CMsgSwapTile:
+ { CMsgSwapTileMsg *m UNUSED = (CMsgSwapTileMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"SwapTile %d %s %s\r\n", m->id, tile_code(m->oldtile), tile_code(m->newtile));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_cmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
--- /dev/null
+++ b/enc_pmsg.c
@@ -0,0 +1,516 @@
+ case PMsgSaveState:
+ { PMsgSaveStateMsg *m UNUSED = (PMsgSaveStateMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"SaveState %s%s\r\n",(m->filename && (m->filename[0] == ' ' || m->filename[0] == '\\')) ? "\\" : "", m->filename ? m->filename : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgLoadState:
+ { PMsgLoadStateMsg *m UNUSED = (PMsgLoadStateMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"LoadState %s%s\r\n",(m->filename && (m->filename[0] == ' ' || m->filename[0] == '\\')) ? "\\" : "", m->filename ? m->filename : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgConnect:
+ { PMsgConnectMsg *m UNUSED = (PMsgConnectMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"Connect %d %d %s%s\r\n", m->pvers, m->last_id,(m->name && (m->name[0] == ' ' || m->name[0] == '\\')) ? "\\" : "", m->name ? m->name : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgAuthInfo:
+ { PMsgAuthInfoMsg *m UNUSED = (PMsgAuthInfoMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"AuthInfo %s %s%s\r\n", m->authtype ,(m->authdata && (m->authdata[0] == ' ' || m->authdata[0] == '\\')) ? "\\" : "", m->authdata ? m->authdata : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgNewAuthInfo:
+ { PMsgNewAuthInfoMsg *m UNUSED = (PMsgNewAuthInfoMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"NewAuthInfo %s %s%s\r\n", m->authtype ,(m->authdata && (m->authdata[0] == ' ' || m->authdata[0] == '\\')) ? "\\" : "", m->authdata ? m->authdata : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgRequestReconnect:
+ { PMsgRequestReconnectMsg *m UNUSED = (PMsgRequestReconnectMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"RequestReconnect\r\n");
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgDisconnect:
+ { PMsgDisconnectMsg *m UNUSED = (PMsgDisconnectMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"Disconnect\r\n");
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgDeclareSpecial:
+ { PMsgDeclareSpecialMsg *m UNUSED = (PMsgDeclareSpecialMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"DeclareSpecial %s\r\n", tile_code(m->tile));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgRequestPause:
+ { PMsgRequestPauseMsg *m UNUSED = (PMsgRequestPauseMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"RequestPause %s%s\r\n",(m->reason && (m->reason[0] == ' ' || m->reason[0] == '\\')) ? "\\" : "", m->reason ? m->reason : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgReady:
+ { PMsgReadyMsg *m UNUSED = (PMsgReadyMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"Ready\r\n");
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgDiscard:
+ { PMsgDiscardMsg *m UNUSED = (PMsgDiscardMsg *) msg;
+ badfield = 0;
+ if ( m->calling < 0 || m->calling > 1 ) { warn("bad boolean in message, assuming TRUE"); badfield = 1 ; };
+ while (1) {
+ int size = snprintf(buf,buf_size,"Discard %s %d\r\n", tile_code(m->tile), (badfield ? 1 : m->calling));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgNoClaim:
+ { PMsgNoClaimMsg *m UNUSED = (PMsgNoClaimMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"NoClaim %d\r\n", m->discard);
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgPung:
+ { PMsgPungMsg *m UNUSED = (PMsgPungMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"Pung %d\r\n", m->discard);
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgFormClosedPung:
+ { PMsgFormClosedPungMsg *m UNUSED = (PMsgFormClosedPungMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"FormClosedPung %s\r\n", tile_code(m->tile));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgKong:
+ { PMsgKongMsg *m UNUSED = (PMsgKongMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"Kong %d\r\n", m->discard);
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgDeclareClosedKong:
+ { PMsgDeclareClosedKongMsg *m UNUSED = (PMsgDeclareClosedKongMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"DeclareClosedKong %s\r\n", tile_code(m->tile));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgAddToPung:
+ { PMsgAddToPungMsg *m UNUSED = (PMsgAddToPungMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"AddToPung %s\r\n", tile_code(m->tile));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgQueryMahJong:
+ { PMsgQueryMahJongMsg *m UNUSED = (PMsgQueryMahJongMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"QueryMahJong %s\r\n", tile_code(m->tile));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgChow:
+ { PMsgChowMsg *m UNUSED = (PMsgChowMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"Chow %d %s\r\n", m->discard, cpos_string(m->cpos));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgFormClosedChow:
+ { PMsgFormClosedChowMsg *m UNUSED = (PMsgFormClosedChowMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"FormClosedChow %s\r\n", tile_code(m->tile));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgDeclareWashOut:
+ { PMsgDeclareWashOutMsg *m UNUSED = (PMsgDeclareWashOutMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"DeclareWashOut\r\n");
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgMahJong:
+ { PMsgMahJongMsg *m UNUSED = (PMsgMahJongMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"MahJong %d\r\n", m->discard);
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgPair:
+ { PMsgPairMsg *m UNUSED = (PMsgPairMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"Pair\r\n");
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgFormClosedPair:
+ { PMsgFormClosedPairMsg *m UNUSED = (PMsgFormClosedPairMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"FormClosedPair %s\r\n", tile_code(m->tile));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgSpecialSet:
+ { PMsgSpecialSetMsg *m UNUSED = (PMsgSpecialSetMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"SpecialSet\r\n");
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgFormClosedSpecialSet:
+ { PMsgFormClosedSpecialSetMsg *m UNUSED = (PMsgFormClosedSpecialSetMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"FormClosedSpecialSet\r\n");
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgShowTiles:
+ { PMsgShowTilesMsg *m UNUSED = (PMsgShowTilesMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"ShowTiles\r\n");
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgSetPlayerOption:
+ { PMsgSetPlayerOptionMsg *m UNUSED = (PMsgSetPlayerOptionMsg *) msg;
+ badfield = 0;
+ if ( m->ack < 0 || m->ack > 1 ) { warn("bad boolean in message, assuming TRUE"); badfield = 1 ; };
+ while (1) {
+ int size = snprintf(buf,buf_size,"SetPlayerOption %s %d %d %s%s\r\n", player_print_PlayerOption(m->option), (badfield ? 1 : m->ack), m->value,(m->text && (m->text[0] == ' ' || m->text[0] == '\\')) ? "\\" : "", m->text ? m->text : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgSetGameOption:
+ { PMsgSetGameOptionMsg *m UNUSED = (PMsgSetGameOptionMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"SetGameOption %s %s%s\r\n", m->optname ,(m->optvalue && (m->optvalue[0] == ' ' || m->optvalue[0] == '\\')) ? "\\" : "", m->optvalue ? m->optvalue : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgQueryGameOption:
+ { PMsgQueryGameOptionMsg *m UNUSED = (PMsgQueryGameOptionMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"QueryGameOption %s\r\n", m->optname );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgListGameOptions:
+ { PMsgListGameOptionsMsg *m UNUSED = (PMsgListGameOptionsMsg *) msg;
+ badfield = 0;
+ if ( m->include_disabled < 0 || m->include_disabled > 1 ) { warn("bad boolean in message, assuming TRUE"); badfield = 1 ; };
+ while (1) {
+ int size = snprintf(buf,buf_size,"ListGameOptions %d\r\n", (badfield ? 1 : m->include_disabled));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgChangeManager:
+ { PMsgChangeManagerMsg *m UNUSED = (PMsgChangeManagerMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"ChangeManager %d\r\n", m->manager);
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgSendMessage:
+ { PMsgSendMessageMsg *m UNUSED = (PMsgSendMessageMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"SendMessage %d %s%s\r\n", m->addressee,(m->text && (m->text[0] == ' ' || m->text[0] == '\\')) ? "\\" : "", m->text ? m->text : "" );
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
+ case PMsgSwapTile:
+ { PMsgSwapTileMsg *m UNUSED = (PMsgSwapTileMsg *) msg;
+ while (1) {
+ int size = snprintf(buf,buf_size,"SwapTile %d %s %s\r\n", m->id, tile_code(m->oldtile), tile_code(m->newtile));
+ if ((size >= 0)&&(size < (int)buf_size))
+ break;
+ buf_size = (size >= 0)?((size_t)size+1):(buf_size > 0)?(buf_size*2):1024;
+ buf = realloc(buf, buf_size);
+ if (!buf) {
+ perror("encode_pmsg");
+ exit(-1);
+ }
+ }
+ }
+ break;
--- /dev/null
+++ b/fbtiles.c
@@ -0,0 +1,2149 @@
+/* XPM */
+static char *pm_99[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 1 1",
+/* colors */
+" c #FF0000",
+/* pixels */
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "
+};
+/* XPM */
+static char *pm_0[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 1 1",
+/* colors */
+" c #948D13",
+/* pixels */
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "
+};
+/* XPM */
+static char *pm_11[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 3 1",
+/* colors */
+" c #B00000",
+". c #EAEAEA",
+"X c #063A30",
+/* pixels */
+".........................",
+"...X........... . . . ...",
+"...X..... .X.... . . . ..",
+"..XX. . X... . . . . .",
+".XX..... ..X. . . . . ",
+".XX..... X.. . . .",
+".XX... . ..X. . . . . ",
+"X.X.. . . ...X. . .",
+"X.X.. ... X..X X X . ",
+"X.X.. .. ..X.X.XX . .",
+"X.X.. .X...X.X X X . . ",
+"X.X.. ..X..X.X.X X X . .",
+"X..X. ..X..XXXXXXXX . . ",
+"X.XX. ..X.X . . .XX .. .",
+"X .X. ..XXX X X XXX.. ...",
+"X. XXXX.X. . . . XX......",
+"X .XX.X.XX X X X XXXX....",
+"X. XX.X.X . . . .XXXXX...",
+"X .XX...XXXXXXXXX.XX..XX.",
+"X.XXX...XXX. . XX...X...X",
+"XXX.XX..XX. . .X.XX..X...",
+"XX...XXXXX . . .X.XXX....",
+"X.........X . .X.X.X.XX..",
+".......... XXXXXXXXXXXXXX",
+"......... .. . .......",
+"........ . .. .. .......",
+"....... ... .. ... ......",
+"...... ....... .........",
+"...... . ...... .........",
+"...... ...XXXXX X........",
+"...XXXX XX.... ..X.X.X...",
+".X.X.......... ..X..X....",
+"..XX....... . ...XXX.X...",
+"...XX....... .....X...X.",
+"XXXX..... .. .....XXXXX"
+};
+/* XPM */
+static char *pm_12[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 2 1",
+/* colors */
+" c #EAEAEA",
+". c #063A30",
+/* pixels */
+" ..... ",
+" ... ... ",
+" .. .. ",
+" . . ",
+" . . ",
+" . . ",
+" ..... ",
+" ... ... ",
+" ..... ",
+" . . ",
+" . . ",
+" . . ",
+" .. .. ",
+" ... ... ",
+" ..... ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ..... ",
+" ... ... ",
+" .. .. ",
+" . . ",
+" . . ",
+" . . ",
+" ..... ",
+" ... ... ",
+" ..... ",
+" . . ",
+" . . ",
+" . . ",
+" .. .. ",
+" ... ... ",
+" ..... "
+};
+/* XPM */
+static char *pm_13[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 2 1",
+/* colors */
+" c #EAEAEA",
+". c #063A30",
+/* pixels */
+" ..... ",
+" ... ... ",
+" .. .. ",
+" . . ",
+" . . ",
+" . . ",
+" ..... ",
+" ... ... ",
+" ..... ",
+" . . ",
+" . . ",
+" . . ",
+" .. .. ",
+" ... ... ",
+" ..... ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ..... ..... ",
+"... ... ... ...",
+" .. .. .. .. ",
+" . . . . ",
+" . . . . ",
+" . . . . ",
+" ..... ..... ",
+"... ... ... ...",
+" ..... ..... ",
+" . . . . ",
+" . . . . ",
+" . . . . ",
+" .. .. .. .. ",
+"... ... ... ...",
+" ..... ..... "
+};
+/* XPM */
+static char *pm_14[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 2 1",
+/* colors */
+" c #EAEAEA",
+". c #063A30",
+/* pixels */
+" ..... ..... ",
+" ... ... ... ... ",
+" .. .. .. .. ",
+" . . . . ",
+" . . . . ",
+" . . . . ",
+" ..... ..... ",
+" ... ... ... ... ",
+" ..... ..... ",
+" . . . . ",
+" . . . . ",
+" . . . . ",
+" .. .. .. .. ",
+" ... ... ... ... ",
+" ..... ..... ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ..... ..... ",
+" ... ... ... ... ",
+" .. .. .. .. ",
+" . . . . ",
+" . . . . ",
+" . . . . ",
+" ..... ..... ",
+" ... ... ... ... ",
+" ..... ..... ",
+" . . . . ",
+" . . . . ",
+" . . . . ",
+" .. .. .. .. ",
+" ... ... ... ... ",
+" ..... ..... "
+};
+/* XPM */
+static char *pm_15[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 3 1",
+/* colors */
+" c #B00000",
+". c #EAEAEA",
+"X c #063A30",
+/* pixels */
+".XXXXX.............XXXXX.",
+"XXX.XXX...........XXX.XXX",
+".XX.XX.............XX.XX.",
+"..X.X...............X.X..",
+"..X.X...............X.X..",
+"..X.X...............X.X..",
+".XXXXX.............XXXXX.",
+"XXX.XXX...........XXX.XXX",
+".XXXXX.............XXXXX.",
+"..X.X...............X.X..",
+"..X.X..... .....X.X..",
+"..X.X.... . ....X.X..",
+".XX.XX.... . ....XX.XX.",
+"XXX.XXX.... . ....XXX.XXX",
+".XXXXX..... . .....XXXXX.",
+"........... . ...........",
+".......... ..........",
+"......... . .........",
+".......... ..........",
+"........... . ...........",
+".XXXXX..... . .....XXXXX.",
+"XXX.XXX.... . ....XXX.XXX",
+".XX.XX.... . ....XX.XX.",
+"..X.X.... . ....X.X..",
+"..X.X..... .....X.X..",
+"..X.X...............X.X..",
+".XXXXX.............XXXXX.",
+"XXX.XXX...........XXX.XXX",
+".XXXXX.............XXXXX.",
+"..X.X...............X.X..",
+"..X.X...............X.X..",
+"..X.X...............X.X..",
+".XX.XX.............XX.XX.",
+"XXX.XXX...........XXX.XXX",
+".XXXXX.............XXXXX."
+};
+/* XPM */
+static char *pm_16[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 2 1",
+/* colors */
+" c #EAEAEA",
+". c #063A30",
+/* pixels */
+" ..... ..... ..... ",
+"... ... ... ... ... ...",
+" .. .. .. .. .. .. ",
+" . . . . . . ",
+" . . . . . . ",
+" . . . . . . ",
+" ..... ..... ..... ",
+"... .. ... ... ... ...",
+" ..... ..... ..... ",
+" . . . . . . ",
+" . . . . . . ",
+" . . . . . . ",
+" .. .. .. .. .. .. ",
+"... ... ... ... ... ...",
+" ..... ..... ..... ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ..... ..... ..... ",
+"... ... ... ... ... ...",
+" .. .. .. .. .. .. ",
+" . . . . . . ",
+" . . . . . . ",
+" . . . . . . ",
+" ..... ..... ..... ",
+"... .. ... ... ... ...",
+" ..... ..... ..... ",
+" . . . . . . ",
+" . . . . . . ",
+" . . . . . . ",
+" .. .. .. .. .. .. ",
+"... ... ... ... ... ...",
+" ..... ..... ..... "
+};
+/* XPM */
+static char *pm_17[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 3 1",
+/* colors */
+" c #B00000",
+". c #EAEAEA",
+"X c #063A30",
+/* pixels */
+".......... ..........",
+"......... . .........",
+".......... . ..........",
+"........... . ...........",
+".......... ..........",
+"......... . .........",
+".......... ..........",
+"........... . ...........",
+".......... . ..........",
+"......... . .........",
+".......... ..........",
+".........................",
+".XXXXX....XXXXX....XXXXX.",
+"XXX.XXX..XXX.XXX..XXX.XXX",
+".XX.XX....XX.XX....XX.XX.",
+"..X.X......X.X......X.X..",
+".XXXXX....XXXXX....XXXXX.",
+"XXX.XXX..XXX.XXX..XXX.XXX",
+".XXXXX....XXXXX....XXXXX.",
+"..X.X......X.X......X.X..",
+".XX.XX....XX.XX....XX.XX.",
+"XXX.XXX..XXX.XXX..XXX.XXX",
+".XXXXX....XXXXX....XXXXX.",
+".........................",
+".XXXXX....XXXXX....XXXXX.",
+"XXX.XXX..XXX.XXX..XXX.XXX",
+".XX.XX....XX.XX....XX.XX.",
+"..X.X......X.X......X.X..",
+".XXXXX....XXXXX....XXXXX.",
+"XXX.XXX..XXX.XXX..XXX.XXX",
+".XXXXX....XXXXX....XXXXX.",
+"..X.X......X.X......X.X..",
+".XX.XX....XX.XX....XX.XX.",
+"XXX.XXX..XXX.XXX..XXX.XXX",
+".XXXXX....XXXXX....XXXXX."
+};
+/* XPM */
+static char *pm_18[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 2 1",
+/* colors */
+" c #EAEAEA",
+". c #063A30",
+/* pixels */
+" ..... ..... ",
+"... ... ... ...",
+" .. .. .. .. ",
+" . . . . ",
+" . . ..... . . ",
+" . . .. .. . . ",
+" ..... . ... ..... ",
+"... ... .. ... .. ... ...",
+" ..... .... .... ..... ",
+" . . .. .. .. .. . . ",
+" . . .... .... . . ",
+" . .. .. .. .. . ",
+" .. . . ... .. ",
+"... ... ... ...",
+" ..... ..... ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ..... ..... ",
+"... ... ... ...",
+" .. . . . . .. ",
+" . .. .. .. .. . ",
+" . . .... .... . . ",
+" . . .. .. .. .. . . ",
+" ..... .... .... ..... ",
+"... ... .. ... .. ... ...",
+" ..... ... . ..... ",
+" . . .. .. . . ",
+" . . ..... . . ",
+" . . . . ",
+" .. .. .. .. ",
+"... ... ... ...",
+" ..... ..... "
+};
+/* XPM */
+static char *pm_19[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 3 1",
+/* colors */
+" c #B00000",
+". c #EAEAEA",
+"X c #063A30",
+/* pixels */
+".XXXXX.... ....XXXXX.",
+"XXX.XXX.. . ..XXX.XXX",
+".XX.XX.... . ....XX.XX.",
+"..X.X...... . ......X.X..",
+".XXXXX.... ....XXXXX.",
+"XXX.XXX.. . ..XXX.XXX",
+".XXXXX.... ....XXXXX.",
+"..X.X...... . ......X.X..",
+".XX.XX.... . ....XX.XX.",
+"XXX.XXX.. . ..XXX.XXX",
+".XXXXX.... ....XXXXX.",
+".........................",
+".XXXXX.... ....XXXXX.",
+"XXX.XXX.. . ..XXX.XXX",
+".XX.XX.... . ....XX.XX.",
+"..X.X...... . ......X.X..",
+".XXXXX.... ....XXXXX.",
+"XXX.XXX.. . ..XXX.XXX",
+".XXXXX.... ....XXXXX.",
+"..X.X...... . ......X.X..",
+".XX.XX.... . ....XX.XX.",
+"XXX.XXX.. . ..XXX.XXX",
+".XXXXX.... ....XXXXX.",
+".........................",
+".XXXXX.... ....XXXXX.",
+"XXX.XXX.. . ..XXX.XXX",
+".XX.XX.... . ....XX.XX.",
+"..X.X...... . ......X.X..",
+".XXXXX.... ....XXXXX.",
+"XXX.XXX.. . ..XXX.XXX",
+".XXXXX.... ....XXXXX.",
+"..X.X...... . ......X.X..",
+".XX.XX.... . ....XX.XX.",
+"XXX.XXX.. . ..XXX.XXX",
+".XXXXX.... ....XXXXX."
+};
+/* XPM */
+static char *pm_21[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 3 1",
+/* colors */
+" c #000000",
+". c #B00000",
+"X c #EAEAEA",
+/* pixels */
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXX XXXXX",
+"XXXXXXXXXXX XXX",
+"XX XXXXXXXX XX",
+"XXX XXXXXXXXXXXXX XX",
+"XXXX XXXXXXXXXXXXXXXX XX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXX.XXXXXXXXXXX",
+"XXXXXXXXXXXX....XXXXXXXXX",
+"XXXXXXXX.XX.XX..XXXXXXXXX",
+"XXXXXXXX..XXX..XXXXXXXXXX",
+"XXXXXXXXX.X......XXXXXXXX",
+"XXXXXXX.....X.XXXXXXXXXXX",
+"XXXXXXXXXXX.....XXXXXXXXX",
+"XXXXXXX.X....XX..XXXXXXXX",
+"XXXXXXX..XX......XXXXXXXX",
+"XXXXXXXX.X...X...XXXXXXXX",
+"XXXXXXXX..XX....XXXXXXXXX",
+"XXXXXXXX.....XX....XXXXXX",
+"XXXX..XXX.X.....XX...XXXX",
+"XXXXX.........XX.XX...XXX",
+"XX.....XXXXX.X....XX...XX",
+"XXX.X..........X..XX...XX",
+"XXXXX.XX..XXXXXX..XX...XX",
+"XXXXXXXXXXXXXX....X...XXX",
+"XXXXXXXXXXXXXXXX.....XXXX"
+};
+/* XPM */
+static char *pm_22[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 3 1",
+/* colors */
+" c #000000",
+". c #B00000",
+"X c #EAEAEA",
+/* pixels */
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXX XXXXXXXXX",
+"XXXXXXXXXX XXXXXXXX",
+"XXXXX XXXXXXXXXXXXXX",
+"XXXXXXX XXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXX XXXXXX",
+"XXXXXXXXXXX XXXX",
+"XXX XXXXXXX XXX",
+"XXXX XXXXXXXXXXX XXX",
+"XXXXX XXXXXXXXXXXXXX XXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXX.XXXXXXXXXXX",
+"XXXXXXXXXXXX....XXXXXXXXX",
+"XXXXXXXX.XX.XX..XXXXXXXXX",
+"XXXXXXXX..XXX..XXXXXXXXXX",
+"XXXXXXXXX.X......XXXXXXXX",
+"XXXXXXX.....X.XXXXXXXXXXX",
+"XXXXXXXXXXX.....XXXXXXXXX",
+"XXXXXXX.X....XX..XXXXXXXX",
+"XXXXXXX..XX......XXXXXXXX",
+"XXXXXXXX.X...X...XXXXXXXX",
+"XXXXXXXX..XX....XXXXXXXXX",
+"XXXXXXXX.....XX....XXXXXX",
+"XXXX..XXX.X.....XX...XXXX",
+"XXXXX.........XX.XX...XXX",
+"XX.....XXXXX.X....XX...XX",
+"XXX.X..........X..XX...XX",
+"XXXXX.XX..XXXXXX..XX...XX",
+"XXXXXXXXXXXXXX....X...XXX",
+"XXXXXXXXXXXXXXXX.....XXXX"
+};
+/* XPM */
+static char *pm_23[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 3 1",
+/* colors */
+" c #000000",
+". c #B00000",
+"X c #EAEAEA",
+/* pixels */
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX XXXXXXXXX",
+"XXXXXXXXXXX XXXXXXX",
+"XXXXXXXX XXXX XXXXXXX",
+"XXXXXX XXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXX XXXXXXXXX",
+"XXXXXXXXXX XXXXXXXX",
+"XXXXXXXX XXXX XXXXXXXXX",
+"XXXXXXXX XXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXX XXXXXXX",
+"XXXXXXXXX XXXXX",
+"XXXX XXXXXXXX XXXX",
+"XXXXX XXXXXXXXXXXX XXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXX.XXXXXXXXXXX",
+"XXXXXXXXXXXX....XXXXXXXXX",
+"XXXXXXXX.XX.XX..XXXXXXXXX",
+"XXXXXXXX..XXX..XXXXXXXXXX",
+"XXXXXXXXX.X......XXXXXXXX",
+"XXXXXXX.....X.XXXXXXXXXXX",
+"XXXXXXXXXXX.....XXXXXXXXX",
+"XXXXXXX.X....XX..XXXXXXXX",
+"XXXXXXX..XX......XXXXXXXX",
+"XXXXXXXX.X...X...XXXXXXXX",
+"XXXXXXXX..XX....XXXXXXXXX",
+"XXXXXXXX.....XX....XXXXXX",
+"XXXX..XXX.X.....XX...XXXX",
+"XXXXX.........XX.XX...XXX",
+"XX.....XXXXX.X....XX...XX",
+"XXX.X..........X..XX...XX",
+"XXXXX.XX..XXXXXX..XX...XX",
+"XXXXXXXXXXXXXX....X...XXX",
+"XXXXXXXXXXXXXXXX.....XXXX"
+};
+/* XPM */
+static char *pm_24[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 3 1",
+/* colors */
+" c #000000",
+". c #B00000",
+"X c #EAEAEA",
+/* pixels */
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXX XXXXX",
+"XXXX XX XX XX XXXX",
+"XXX XXXX XX XXX",
+"XXX XX XXX XX XXX",
+"XXX XXX XX XX XXX",
+"XXXX XXXX X XXX XXXX",
+"XXXXX XX XXXXX",
+"XXXXXX XXXXXXX XXXXXX",
+"XXXXXXX XXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXX.XXXXXXXXXXX",
+"XXXXXXXXXXXX....XXXXXXXXX",
+"XXXXXXXX.XX.XX..XXXXXXXXX",
+"XXXXXXXX..XXX..XXXXXXXXXX",
+"XXXXXXXXX.X......XXXXXXXX",
+"XXXXXXX.....X.XXXXXXXXXXX",
+"XXXXXXXXXXX.....XXXXXXXXX",
+"XXXXXXX.X....XX..XXXXXXXX",
+"XXXXXXX..XX......XXXXXXXX",
+"XXXXXXXX.X...X...XXXXXXXX",
+"XXXXXXXX..XX....XXXXXXXXX",
+"XXXXXXXX.....XX....XXXXXX",
+"XXXX..XXX.X.....XX...XXXX",
+"XXXXX.........XX.XX...XXX",
+"XX.....XXXXX.X....XX...XX",
+"XXX.X..........X..XX...XX",
+"XXXXX.XX..XXXXXX..XX...XX",
+"XXXXXXXXXXXXXX....X...XXX",
+"XXXXXXXXXXXXXXXX.....XXXX"
+};
+/* XPM */
+static char *pm_25[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 3 1",
+/* colors */
+" c #000000",
+". c #B00000",
+"X c #EAEAEA",
+/* pixels */
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXX XXXXXXXXX",
+"XXXXXXXXXXXXXX XXXXXXX",
+"XXXXXX XXXX XXXXXX",
+"XXXXXXX X XXXXXXXXXX",
+"XXXXXX XXXX XXXXXXXXXX",
+"XXXXXX XXX X XXXXXXXX",
+"XXXXXX XXXX XXXXXXX",
+"XXXXX X XXXXXX",
+"XXXXX XX XX XXXXXXXX",
+"XXXX X XXX XX X XXXXX",
+"XXXX XX XX XXX",
+"XXX XX XXXXXXX XX",
+"XX XXX XXXXXXXXXXXX XX",
+"XXXXXXX XXXXXXXXXXXXX XXX",
+"XXXXXXXXXXXXX.XXXXXXXXXXX",
+"XXXXXXXXXXXX....XXXXXXXXX",
+"XXXXXXXX.XX.XX..XXXXXXXXX",
+"XXXXXXXX..XXX..XXXXXXXXXX",
+"XXXXXXXXX.X......XXXXXXXX",
+"XXXXXXX.....X.XXXXXXXXXXX",
+"XXXXXXXXXXX.....XXXXXXXXX",
+"XXXXXXX.X....XX..XXXXXXXX",
+"XXXXXXX..XX......XXXXXXXX",
+"XXXXXXXX.X...X...XXXXXXXX",
+"XXXXXXXX..XX....XXXXXXXXX",
+"XXXXXXXX.....XX....XXXXXX",
+"XXXX..XXX.X.....XX...XXXX",
+"XXXXX.........XX.XX...XXX",
+"XX.....XXXXX.X....XX...XX",
+"XXX.X..........X..XX...XX",
+"XXXXX.XX..XXXXXX..XX...XX",
+"XXXXXXXXXXXXXX....X...XXX",
+"XXXXXXXXXXXXXXXX.....XXXX"
+};
+/* XPM */
+static char *pm_26[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 3 1",
+/* colors */
+" c #000000",
+". c #B00000",
+"X c #EAEAEA",
+/* pixels */
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXX XXXXXXXXXXXX",
+"XXXXXXXXXXXX XXXXXXXXXXX",
+"XXXXXXXXXXXX XX XXXXXXX",
+"XXXXXXXXXXXX XX XXXXXX",
+"XXXXXXXXXXX XXXXX",
+"XXXX XXXXX XXXX",
+"XXXXX XXXX XXXXXX XXXX",
+"XXXXXXXX XXX XXX XXXXX",
+"XXXXXXXXX XX XXXXXXXX",
+"XXXXXXXXX XXXX XXXXXX",
+"XXXXXXXX XXXXXX XXXXXX",
+"XXXXXXX XXXXXXXX XXXXXX",
+"XXXXXX XXXXXXXXXXX XXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXX.XXXXXXXXXXX",
+"XXXXXXXXXXXX....XXXXXXXXX",
+"XXXXXXXX.XX.XX..XXXXXXXXX",
+"XXXXXXXX..XXX..XXXXXXXXXX",
+"XXXXXXXXX.X......XXXXXXXX",
+"XXXXXXX.....X.XXXXXXXXXXX",
+"XXXXXXXXXXX.....XXXXXXXXX",
+"XXXXXXX.X....XX..XXXXXXXX",
+"XXXXXXX..XX......XXXXXXXX",
+"XXXXXXXX.X...X...XXXXXXXX",
+"XXXXXXXX..XX....XXXXXXXXX",
+"XXXXXXXX.....XX....XXXXXX",
+"XXXX..XXX.X.....XX...XXXX",
+"XXXXX.........XX.XX...XXX",
+"XX.....XXXXX.X....XX...XX",
+"XXX.X..........X..XX...XX",
+"XXXXX.XX..XXXXXX..XX...XX",
+"XXXXXXXXXXXXXX....X...XXX",
+"XXXXXXXXXXXXXXXX.....XXXX"
+};
+/* XPM */
+static char *pm_27[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 3 1",
+/* colors */
+" c #000000",
+". c #B00000",
+"X c #EAEAEA",
+/* pixels */
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXX XXXXXXXX XXX",
+"XXXXXXXX XXXXX XXXX",
+"XXXXXXXXX XXXX XXXXXXXX",
+"XXXXXXXXX XXX XXXXXXXXXX",
+"XXXXXXXXXX XX XXXXXXXXXXX",
+"XXXXXXXXXX X XXXXXXXXXXXX",
+"XXXXXXXXXX XXXXXXXXXXXXX",
+"XXXXXXXXX XX XXXXXXXX",
+"XXXXXXXX X XXXXXXX",
+"XXXXXX XXX XXXXXX",
+"XXX XXXXXX XXXXXXX",
+"XXXX XXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXX.XXXXXXXXXXX",
+"XXXXXXXXXXXX....XXXXXXXXX",
+"XXXXXXXX.XX.XX..XXXXXXXXX",
+"XXXXXXXX..XXX..XXXXXXXXXX",
+"XXXXXXXXX.X......XXXXXXXX",
+"XXXXXXX.....X.XXXXXXXXXXX",
+"XXXXXXXXXXX.....XXXXXXXXX",
+"XXXXXXX.X....XX..XXXXXXXX",
+"XXXXXXX..XX......XXXXXXXX",
+"XXXXXXXX.X...X...XXXXXXXX",
+"XXXXXXXX..XX....XXXXXXXXX",
+"XXXXXXXX.....XX....XXXXXX",
+"XXXX..XXX.X.....XX...XXXX",
+"XXXXX.........XX.XX...XXX",
+"XX.....XXXXX.X....XX...XX",
+"XXX.X..........X..XX...XX",
+"XXXXX.XX..XXXXXX..XX...XX",
+"XXXXXXXXXXXXXX....X...XXX",
+"XXXXXXXXXXXXXXXX.....XXXX"
+};
+/* XPM */
+static char *pm_28[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 3 1",
+/* colors */
+" c #000000",
+". c #B00000",
+"X c #EAEAEA",
+/* pixels */
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXX XXXXXXXXXXXX",
+"XXXXXXXXXX XXXXXXXXXXX",
+"XXXXXXXXXXXX XXXXXXXXXXXX",
+"XXXXXXXXXXXXX XXXXXXXXXXX",
+"XXXXXXX XXXXX XXXXXXXXXX",
+"XXXXXXXX XXXX XXXXXXXXX",
+"XXXXXXX XXXX XXXXXXX",
+"XXXXXXX X XXXXX XXXX",
+"XXXXXX XXXXXXXXX X",
+"XXXX XXXXXXXXXXXX XXX",
+"X XXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXX.XXXXXXXXXXX",
+"XXXXXXXXXXXX....XXXXXXXXX",
+"XXXXXXXX.XX.XX..XXXXXXXXX",
+"XXXXXXXX..XXX..XXXXXXXXXX",
+"XXXXXXXXX.X......XXXXXXXX",
+"XXXXXXX.....X.XXXXXXXXXXX",
+"XXXXXXXXXXX.....XXXXXXXXX",
+"XXXXXXX.X....XX..XXXXXXXX",
+"XXXXXXX..XX......XXXXXXXX",
+"XXXXXXXX.X...X...XXXXXXXX",
+"XXXXXXXX..XX....XXXXXXXXX",
+"XXXXXXXX.....XX....XXXXXX",
+"XXXX..XXX.X.....XX...XXXX",
+"XXXXX.........XX.XX...XXX",
+"XX.....XXXXX.X....XX...XX",
+"XXX.X..........X..XX...XX",
+"XXXXX.XX..XXXXXX..XX...XX",
+"XXXXXXXXXXXXXX....X...XXX",
+"XXXXXXXXXXXXXXXX.....XXXX"
+};
+/* XPM */
+static char *pm_29[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 3 1",
+/* colors */
+" c #000000",
+". c #B00000",
+"X c #EAEAEA",
+/* pixels */
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXX XXX XXXXXXXXX",
+"XXXXXXXX XXX XXXXXXX",
+"XXXXXXXXX XXX XXXXXX",
+"XXXXXXXXX X XXXXXX",
+"XXXXX XXXXXXXXXX",
+"XXXXXXXXX XX XXXXX XXXXX",
+"XXXXXXXX XX XXXXX XXXXX",
+"XXXXXXXX XXX XXXXX XXXX",
+"XXXXXXX XXXX XXX XXXX",
+"XXXXXX XXXXXX XXX",
+"XXXXX XXXXXXXX XXXX",
+"XXX XXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXX.XXXXXXXXXXX",
+"XXXXXXXXXXXX....XXXXXXXXX",
+"XXXXXXXX.XX.XX..XXXXXXXXX",
+"XXXXXXXX..XXX..XXXXXXXXXX",
+"XXXXXXXXX.X......XXXXXXXX",
+"XXXXXXX.....X.XXXXXXXXXXX",
+"XXXXXXXXXXX.....XXXXXXXXX",
+"XXXXXXX.X....XX..XXXXXXXX",
+"XXXXXXX..XX......XXXXXXXX",
+"XXXXXXXX.X...X...XXXXXXXX",
+"XXXXXXXX..XX....XXXXXXXXX",
+"XXXXXXXX.....XX....XXXXXX",
+"XXXX..XXX.X.....XX...XXXX",
+"XXXXX.........XX.XX...XXX",
+"XX.....XXXXX.X....XX...XX",
+"XXX.X..........X..XX...XX",
+"XXXXX.XX..XXXXXX..XX...XX",
+"XXXXXXXXXXXXXX....X...XXX",
+"XXXXXXXXXXXXXXXX.....XXXX"
+};
+/* XPM */
+static char *pm_31[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 3 1",
+/* colors */
+" c #002065",
+". c #B00000",
+"X c #EAEAEA",
+/* pixels */
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXX XXXXXXXXX",
+"XXXXXXX X X X X XXXXXXX",
+"XXXXXX X X X X X XXXXXX",
+"XXXXX XX X X XX XXXXX",
+"XXXX XX X X XX XXXX",
+"XXX X XX XX X XXX",
+"XXX X ..... X XXX",
+"XX X XX ..X.X.. XX X XX",
+"XX X ..X.X.X.. X XX",
+"XX X X .X.....X. X X XX",
+"XX X ..X.X.X.. X XX",
+"XX X X .X.....X. X X XX",
+"XX X ..X.X.X.. X XX",
+"XX X XX ..X.X.. XX X XX",
+"XXX X ..... X XXX",
+"XXX X XX XX X XXX",
+"XXXX XX X X XX XXXX",
+"XXXXX XX X X XX XXXXX",
+"XXXXXX X X X X X XXXXXX",
+"XXXXXXX X X X X XXXXXXX",
+"XXXXXXXXX XXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX"
+};
+/* XPM */
+static char *pm_32[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 2 1",
+/* colors */
+" c #002065",
+". c #EAEAEA",
+/* pixels */
+".........................",
+".........................",
+".........................",
+".......... ..........",
+"......... ... .........",
+"........ .. .. ........",
+"....... . . .......",
+"...... . . . . . ......",
+"...... . . . . ......",
+"...... . . . . . ......",
+"...... . . . . ......",
+"...... . . . . . ......",
+"....... . . .......",
+"........ .. .. ........",
+"......... ... .........",
+".......... ..........",
+".........................",
+".........................",
+".........................",
+".......... ..........",
+"......... ... .........",
+"........ .. .. ........",
+"....... . . .......",
+"...... . . . . . ......",
+"...... . . . . ......",
+"...... . . . . . ......",
+"...... . . . . ......",
+"...... . . . . . ......",
+"....... . . .......",
+"........ .. .. ........",
+"......... ... .........",
+".......... ..........",
+".........................",
+".........................",
+"........................."
+};
+/* XPM */
+static char *pm_33[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 3 1",
+/* colors */
+" c #002065",
+". c #B00000",
+"X c #EAEAEA",
+/* pixels */
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXX XXXXXXXXXXXXXXXXX",
+"XX XXX XXXXXXXXXXXXXXXX",
+"X X X XXXXXXXXXXXXXXX",
+" X X X X XXXXXXXXXXXXXX",
+" X X X X X XXXXXXXXXXXXXX",
+" X X X X XXXXXXXXXXXXXX",
+" X X X X X XXXXXXXXXXXXXX",
+" X X X X XXXXXXXXXXXXXX",
+"X X X XXXXXXXXXXXXXXX",
+"XX XXX XXXXXXXXXXXXXXXX",
+"XXX XXXXXXXXXXXXXXXXX",
+"XXXXXXXXXX.....XXXXXXXXXX",
+"XXXXXXXXX..XXX..XXXXXXXXX",
+"XXXXXXXX..X...X..XXXXXXXX",
+"XXXXXXX..X.X.X.X..XXXXXXX",
+"XXXXXXX.X.X.X.X.X.XXXXXXX",
+"XXXXXXX.X..X.X..X.XXXXXXX",
+"XXXXXXX.X.X.X.X.X.XXXXXXX",
+"XXXXXXX..X.X.X.X..XXXXXXX",
+"XXXXXXXX..X...X..XXXXXXXX",
+"XXXXXXXXX..XXX..XXXXXXXXX",
+"XXXXXXXXXX.....XXXXXXXXXX",
+"XXXXXXXXXXXXXXXXX XXX",
+"XXXXXXXXXXXXXXXX XXX XX",
+"XXXXXXXXXXXXXXX X X X",
+"XXXXXXXXXXXXXX X X X X ",
+"XXXXXXXXXXXXXX X X X X X ",
+"XXXXXXXXXXXXXX X X X X ",
+"XXXXXXXXXXXXXX X X X X X ",
+"XXXXXXXXXXXXXX X X X X ",
+"XXXXXXXXXXXXXXX X X X",
+"XXXXXXXXXXXXXXXX XXX XX",
+"XXXXXXXXXXXXXXXXX XXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX"
+};
+/* XPM */
+static char *pm_34[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 2 1",
+/* colors */
+" c #002065",
+". c #EAEAEA",
+/* pixels */
+".... ....... ....",
+"... ... ..... ... ...",
+".. . . ... . . ..",
+". . . . . . . . . . .",
+". . . . . . . . . . . . .",
+". . . . . . . . . . .",
+". . . . . . . . . . . . .",
+". . . . . . . . . . .",
+".. . . ... . . ..",
+"... ... ..... ... ...",
+".... ....... ....",
+".........................",
+".........................",
+".........................",
+".........................",
+".........................",
+".........................",
+".........................",
+".........................",
+".........................",
+".........................",
+".........................",
+".........................",
+".........................",
+".... ....... ....",
+"... ... ..... ... ...",
+".. . . ... . . ..",
+". . . . . . . . . . .",
+". . . . . . . . . . . . .",
+". . . . . . . . . . .",
+". . . . . . . . . . . . .",
+". . . . . . . . . . .",
+".. . . ... . . ..",
+"... ... ..... ... ...",
+".... ....... ...."
+};
+/* XPM */
+static char *pm_35[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 3 1",
+/* colors */
+" c #002065",
+". c #B00000",
+"X c #EAEAEA",
+/* pixels */
+"XXXX XXXXXXX XXXX",
+"XXX XXX XXXXX XXX XXX",
+"XX X X XXX X X XX",
+"X X X X X X X X X X X",
+"X X X X X X X X X X X X X",
+"X X X X X X X X X X X",
+"X X X X X X X X X X X X X",
+"X X X X X X X X X X X",
+"XX X X XXX X X XX",
+"XXX XXX XXXXX XXX XXX",
+"XXXX XXXXXXX XXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXX.....XXXXXXXXXX",
+"XXXXXXXXX..XXX..XXXXXXXXX",
+"XXXXXXXX..X...X..XXXXXXXX",
+"XXXXXXX..X.X.X.X..XXXXXXX",
+"XXXXXXX.X.X.X.X.X.XXXXXXX",
+"XXXXXXX.X..X.X..X.XXXXXXX",
+"XXXXXXX.X.X.X.X.X.XXXXXXX",
+"XXXXXXX..X.X.X.X..XXXXXXX",
+"XXXXXXXX..X...X..XXXXXXXX",
+"XXXXXXXXX..XXX..XXXXXXXXX",
+"XXXXXXXXXX.....XXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXX XXXXXXX XXXX",
+"XXX XXX XXXXX XXX XXX",
+"XX X X XXX X X XX",
+"X X X X X X X X X X X",
+"X X X X X X X X X X X X X",
+"X X X X X X X X X X X",
+"X X X X X X X X X X X X X",
+"X X X X X X X X X X X",
+"XX X X XXX X X XX",
+"XXX XXX XXXXX XXX XXX",
+"XXXX XXXXXXX XXXX"
+};
+/* XPM */
+static char *pm_36[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 4 1",
+/* colors */
+" c #002065",
+". c #B00000",
+"X c #EAEAEA",
+"o c #FFFFFF",
+/* pixels */
+"XXXo oXXXXXo oXXX",
+"XXo ooo oXXXo ooo oXX",
+"Xo o o oXo o o oX",
+"X o o o o X o o o o X",
+"X X o o o X X X o o o X X",
+"X X o o X X X o o X X",
+"X o o o o o X o o o o o X",
+"X o o o o X o o o o X",
+"XX o o XXX o o XX",
+"XXX ooo XXXXX ooo XXX",
+"XXXX XXXXXXX XXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXX.....XXXXXXX.....XXXX",
+"XXX..ooo..XXXXX..ooo..XXX",
+"XX..o...o..XXX..o...o..XX",
+"X..o.o.o.o..X..o.o.o.o..X",
+"X.o.o.o.o.o.X.o.o.o.o.o.X",
+"X.X..o.o..X.X.X..o.o..X.X",
+"X.X.o.o.o.X.X.X.o.o.o.X.X",
+"X..o.o.o.o..X..o.o.o.o..X",
+"Xo..o...o..oXo..o...o..oX",
+"XXo..ooo..oXXXo..ooo..oXX",
+"XXXo.....oXXXXXo.....oXXX",
+"XXX..ooo..XXXXX..ooo..XXX",
+"XX..o...o..XXX..o...o..XX",
+"X..o.o.o.o..X..o.o.o.o..X",
+"X.o.o.o.o.o.X.o.o.o.o.o.X",
+"X.X..o.o..X.X.X..o.o..X.X",
+"X.X.o.o.o.X.X.X.o.o.o.X.X",
+"X..o.o.o.o..X..o.o.o.o..X",
+"Xo..o...o..oXo..o...o..oX",
+"XXo..ooo..oXXXo..ooo..oXX",
+"XXXo.....oXXXXXo.....oXXX"
+};
+/* XPM */
+static char *pm_37[] = {
+"25 35 3 1",
+". c #EAEAEA",
+"+ c #002065",
+"@ c #B00000",
+"...+++...................",
+".++...++.................",
+".+.+++.+.................",
+"+.++.++.+..+++...........",
+"+.+.+.+.+++...++.........",
+"+.++.++.++.+++.+.........",
+".+.+++.++.++.++.+..+++...",
+".++...+++.+.+.+.+++...++.",
+"...+++..+.++.++.++.+++.+.",
+".........+.+++.++.++.++.+",
+".........++...+++.+.+.+.+",
+"...........+++..+.++.++.+",
+".................+.+++.+.",
+".................++...++.",
+"...................+++...",
+".........................",
+".....@@@.........@@@.....",
+"...@@...@@.....@@...@@...",
+"...@.@@@.@.....@.@@@.@...",
+"..@.@@.@@.@...@.@@.@@.@..",
+"..@.@.@.@.@...@.@.@.@.@..",
+"..@.@@.@@.@...@.@@.@@.@..",
+"...@.@@@.@.....@.@@@.@...",
+"...@@...@@.....@@...@@...",
+".....@@@.........@@@.....",
+".....@@@.........@@@.....",
+"...@@...@@.....@@...@@...",
+"...@.@@@.@.....@.@@@.@...",
+"..@.@@.@@.@...@.@@.@@.@..",
+"..@.@.@.@.@...@.@.@.@.@..",
+"..@.@@.@@.@...@.@@.@@.@..",
+"...@.@@@.@.....@.@@@.@...",
+"...@@...@@.....@@...@@...",
+".....@@@.........@@@.....",
+"........................."};
+/* XPM */
+static char *pm_38[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 2 1",
+/* colors */
+" c #002065",
+". c #EAEAEA",
+/* pixels */
+".........................",
+"...... ....... ......",
+".... ... ... ... ....",
+".... . . ... . . ....",
+"... . . . . . . . ...",
+"... . . . . . . . . . ...",
+"... . . . . . . . ...",
+".... . . ... . . ....",
+".... ... ... ... ....",
+"...... ....... ......",
+".... ... ... ... ....",
+".... . . ... . . ....",
+"... . . . . . . . ...",
+"... . . . . . . . . . ...",
+"... . . . . . . . ...",
+".... . . ... . . ....",
+".... ... ... ... ....",
+"...... ....... ......",
+".... ... ... ... ....",
+".... . . ... . . ....",
+"... . . . . . . . ...",
+"... . . . . . . . . . ...",
+"... . . . . . . . ...",
+".... . . ... . . ....",
+".... ... ... ... ....",
+"...... ....... ......",
+".... ... ... ... ....",
+".... . . ... . . ....",
+"... . . . . . . . ...",
+"... . . . . . . . . . ...",
+"... . . . . . . . ...",
+".... . . ... . . ....",
+".... ... ... ... ....",
+"...... ....... ......",
+"........................."
+};
+/* XPM */
+static char *pm_39[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 3 1",
+/* colors */
+" c #002065",
+". c #B00000",
+"X c #EAEAEA",
+/* pixels */
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXX XXXXX XXXXX XXX",
+"X XXX X XXX X XXX X",
+"X X X X X X X X X X",
+" X X X X X X X X X ",
+" X X X X X X X X X X X X ",
+" X X X X X X X X X ",
+"X X X X X X X X X X",
+"X XXX X XXX X XXX X",
+"XXX XXXXX XXXXX XXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXX...XXXXX...XXXXX...XXX",
+"X..XXX..X..XXX..X..XXX..X",
+"X.X...X.X.X...X.X.X...X.X",
+".X..X..X.X..X..X.X..X..X.",
+".X.X.X.X.X.X.X.X.X.X.X.X.",
+".X..X..X.X..X..X.X..X..X.",
+"X.X...X.X.X...X.X.X...X.X",
+"X..XXX..X..XXX..X..XXX..X",
+"XXX...XXXXX...XXXXX...XXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXX XXXXX XXXXX XXX",
+"X XXX X XXX X XXX X",
+"X X X X X X X X X X",
+" X X X X X X X X X ",
+" X X X X X X X X X X X X ",
+" X X X X X X X X X ",
+"X X X X X X X X X X",
+"X XXX X XXX X XXX X",
+"XXX XXXXX XXXXX XXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX"
+};
+/* XPM */
+static char *pm_41[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 2 1",
+/* colors */
+" c #000000",
+". c #EAEAEA",
+/* pixels */
+".........................",
+".........................",
+".........................",
+"........... ...........",
+"............ ..........",
+"............ ..........",
+"............ ...........",
+"............ . ........",
+"............ .......",
+"....... .......",
+"......... ...........",
+"............ . .......",
+"........... ......",
+"...... . .....",
+"...... .. .... ....",
+"...... .. . ....",
+"...... ....",
+"....... .. ... .....",
+"........ ......",
+"......... . .. .......",
+".......... .........",
+"......... . ........",
+"........ . .. .......",
+"....... .. .. ......",
+"...... ... ... .....",
+"..... .. ... ...",
+"... .... .... ..",
+".......... ...........",
+"........... ...........",
+"............ ...........",
+"............ ............",
+".........................",
+".........................",
+".........................",
+"........................."
+};
+/* XPM */
+static char *pm_42[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 2 1",
+/* colors */
+" c #000000",
+". c #EAEAEA",
+/* pixels */
+".........................",
+".........................",
+".........................",
+"......... ..............",
+".......... ...........",
+"........... .........",
+"............ ..........",
+"............ ..........",
+"............ ...........",
+"............ . .........",
+"............ ........",
+"........... .......",
+"........ . .........",
+"............ . ........",
+"............ .. .......",
+"....... .... .......",
+"....... . ...",
+"........ . .. ..",
+"....... .. ... ..",
+".. ... . .... ..",
+"... . ... .. .. ...",
+"... ... . . ...",
+".... .... ..... ...",
+".... . . ...... ...",
+"..... .... ...... ...",
+"...... ..... ...",
+"....... ........ ...",
+"................... ....",
+".........................",
+".........................",
+".........................",
+".........................",
+".........................",
+".........................",
+"........................."
+};
+/* XPM */
+static char *pm_43[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 2 1",
+/* colors */
+" c #000000",
+". c #EAEAEA",
+/* pixels */
+".........................",
+".........................",
+".........................",
+".........................",
+".........................",
+".........................",
+".........................",
+"................. ......",
+"................ .....",
+"............ ...",
+"....... ..... ..",
+".. ..... . ..",
+"... ......... .......",
+".............. ........",
+"...... ..... .........",
+"....... .... .........",
+"....... ... . .........",
+"........ .. .......",
+"....... . .....",
+"...... . .. .. ....",
+"... . . .. ... ...",
+"... ... .. .... ...",
+"... ... . ... ...",
+".... ... ....",
+"..... .....",
+"...... .... ......",
+"....... ...... .......",
+".........................",
+".........................",
+".........................",
+".........................",
+".........................",
+".........................",
+".........................",
+"........................."
+};
+/* XPM */
+static char *pm_44[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 2 1",
+/* colors */
+" c #000000",
+". c #EAEAEA",
+/* pixels */
+".........................",
+".........................",
+".........................",
+".........................",
+".........................",
+".........................",
+".........................",
+".........................",
+".........................",
+"............. .........",
+"............. .......",
+".............. .......",
+"......... .... .......",
+"....... ... ........",
+"....... .. .. ....",
+"........ .. .. ...",
+"......... ... . ..",
+"... . ... ....",
+"... . ... .......",
+".... .. ... .........",
+"......... ... .........",
+"......... . . .........",
+"... ..... .. ........",
+"... ... ... ..",
+"... .... ..",
+".. . ....... ...",
+"... ... ...............",
+".........................",
+".........................",
+".........................",
+".........................",
+".........................",
+".........................",
+".........................",
+"........................."
+};
+/* XPM */
+static char *pm_51[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 2 1",
+/* colors */
+" c #B00000",
+". c #EAEAEA",
+/* pixels */
+".........................",
+".........................",
+".........................",
+".........................",
+"............ ............",
+".......... ...........",
+"........... ..........",
+"............ ...........",
+"............ ...........",
+"............ ...........",
+"............ .... .....",
+".. ....... ...",
+"... .... ..... ..",
+".... . ... ..... ..",
+".... .... ..... ..",
+"..... .... .... ..",
+"..... ... ... . ...",
+"...... .....",
+"...... ... .. ......",
+"....... ... ... .......",
+"............ ...........",
+"............ ...........",
+"............ ...........",
+"............ ...........",
+"............ ...........",
+"............ ...........",
+"............ ...........",
+"............ ...........",
+"............ ...........",
+"............ ...........",
+"............ ............",
+"............ ............",
+".........................",
+".........................",
+"........................."
+};
+/* XPM */
+static char *pm_52[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 2 1",
+/* colors */
+" c #EAEAEA",
+". c #002060",
+/* pixels */
+" ",
+" ",
+" ...................... ",
+" . . ",
+" . .................. . ",
+" . . . . . . ",
+" . .. .. . ",
+" . . . . ",
+" . . . . ",
+" . . . . ",
+" . . . . ",
+" . . . . ",
+" . . . . ",
+" . . . . ",
+" . . . . ",
+" . . . . ",
+" . . . . ",
+" . . . . ",
+" . . . . ",
+" . . . . ",
+" . . . . ",
+" . . . . ",
+" . . . . ",
+" . . . . ",
+" . . . . ",
+" . . . . ",
+" . . . . ",
+" . . . . ",
+" . .. .. . ",
+" . . . . . . ",
+" . .................. . ",
+" . . ",
+" ...................... ",
+" ",
+" "
+};
+/* XPM */
+static char *pm_53[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 2 1",
+/* colors */
+" c #EAEAEA",
+". c #063A30",
+/* pixels */
+" ",
+" ",
+" ",
+" ",
+" .. ",
+" ... ",
+" ... ",
+" . .. ",
+" .. . ",
+" . ... . . ",
+" ..... . .. ",
+" . ..... ... ",
+" .. . ... .. .. ",
+" .. ... . ... ",
+" .. ... .. .. ",
+" . . .. ....... ",
+" .. .. .. ... ",
+" . .. ........ ",
+" . .. .. .. .... ",
+" . .... .... .... ",
+" . .. ... .......... ",
+" . .. ...... .... ... ",
+" . ... ............. ",
+" . ... ... .... .... ",
+" .. ........... . ",
+" .... . .. ... ",
+" .. .. .... ",
+" . ... ",
+" ... ",
+" .. ",
+" ",
+" ",
+" ",
+" ",
+" "
+};
+/* XPM */
+static char *pm_61[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 4 1",
+/* colors */
+" c #000000",
+". c #B00000",
+"X c #EAEAEA",
+"o c #063A30",
+/* pixels */
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"...XXXXXXXXXXXXX XXXXXXXX",
+"XX.XXXXXooXXXXXX XX X",
+"XX.XXXXoooooXXXX XXXXXXXX",
+"XX.XXXooooXoXXXX XXX XX",
+"X...XXooooXoXXX X X XXXX",
+"XXXXXXXXooXXXXX ",
+"XXXXXooooXXXXXXX X X XXXX",
+"XXXXXoXXooooXXXX XXX XX",
+"XXXXXXooooXXoXXX XXX X XX",
+"XXXXXXXooXXXoXXXXXXXX XXX",
+"XXXXoXXoXXXXXXXXXXXXXXXXX",
+"XXXoXoooXXXXXXXXXXXXXXXXX",
+"XXXooXooooooXXXXXXoXXXXXX",
+"XXXXXooXXXXXXXXXXXXoXXXXX",
+"XXXXXXXX....XXXXXXoXXXXXX",
+"XXXXXXX..XX..XXXXooXXXXXX",
+"XXXXX....XX.....oXooXXXXX",
+"XXXX.............XoXoXXXX",
+"XXX..XX....X.XX..XoXoXXXX",
+"XXXX.XX..XXX....XXXoXXXXX",
+"XXXX......XX....XXoXXXXXX",
+"XXXXX......X...XXXoXXXXXX",
+"XXXooX..XX...X.XXXoXXXXXX",
+"XooooX..XX..XX.XXooXXXXXX",
+"oooooX.........XXooXXXXXX",
+"XooooXXXXXXXXXXXXooXXXXXX",
+"XooooXXooooooooXXooXXXXXX",
+"XXoooooooXXXXooooooXXXXXX",
+"XooXooXXXXXXXXXoooooXXXXX",
+"XXXXXoXXXXXXXXXXXooooXXXX",
+"XXXXXXXXXXXXXXXXXXXoooooX",
+"XXXXXXXXXXXXXXXXXXXXooooX",
+"XXXXXXXXXXXXXXXXXXXXXXooX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX"
+};
+/* XPM */
+static char *pm_62[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 4 1",
+/* colors */
+" c #000000",
+". c #B00000",
+"X c #EAEAEA",
+"o c #063A30",
+/* pixels */
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXX XX",
+"XX....XXXXoXXXXXXXXX XX",
+"XX.XX.XXXXXoXXXXXX XX X",
+"XXXX..XXXXXoXXXXXX XXXX X",
+"XXX..XXXXXXXoXXXXX XXX XX",
+"XX..XXXXXXXXoXXXX ",
+"XX....XXXXXXoXXXXXX XXXX",
+"XXXXXXXXXXXXoXXXXX XXXXX",
+"XXXXXXXXXXXXoXXoX X XXXXX",
+"XXXXXXXXXXXXooXXX X XXXX",
+"XXXXXXXXXXXXoXXXXX XXXXXX",
+"XXXXXXXXXXXooXXXXXXXXXXXX",
+"XXXoXXXXXXXoXXXXXXooooooX",
+"XXoXXXXXXoXoXXoooooXoXXoX",
+"XooXXXXXXXoXXoXXXXXXXXXoo",
+"XoXXXoooXXooooXXXXXXXXXoo",
+"ooXXXXXoXXoooXXXXXXXXXooX",
+"ooXXXXXoXooXXXXXXXXXXXoXX",
+"XXoXXXXoXoXXXXXXXXXXXXXXX",
+"XXXXooXoooXXXXXXXXXXoXXXX",
+"XXXXXooooXXXXXXXXoXXXXXXX",
+"XXXXXXXooXXXXXXXXoXoXXXXX",
+"XXXXXXXoooXXXXXXXXoXooXXX",
+"XXXXXXXoooXXXXXXXXooXXXXX",
+"XXXXXXXoXoXXoXXXXXoXXXXXX",
+"XXXXXXXoXoXooXXXXXoXXXXXX",
+"XXXXXXXoXoXoXXXXXXoXXXXXX",
+"XXXXXXXoooooXXXXXXoXXXXXX",
+"XXXXXXXXoooooXXXXXoXXXXXX",
+"XXXXXXXooooooXXXXooXXXXXX",
+"XXXXXXXXXXoooXXXXoXXXXXXX",
+"XXXXXXXXXXXoooXXooXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX"
+};
+/* XPM */
+static char *pm_63[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 4 1",
+/* colors */
+" c #000000",
+". c #B00000",
+"X c #EAEAEA",
+"o c #063A30",
+/* pixels */
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"X....XXXXXXXXXXXXXXXXX X",
+"X.XX..XXXXXXXXXXXXXXXXXXX",
+"XXX...XXXXXXXXXXXXX ",
+"XXX...XXXXXoXXoXXXXXXXXXX",
+"XXXXX.XXXXXooooXXXXX XXXX",
+"XX.X..XXXXXXooXXXX X XX X",
+"XXX..XXooooXoXXXXXXX XXXX",
+"XXXXXXXooooXoXXXXX X",
+"XXXXXXXXoooooXXXXXXX XXXX",
+"XXXXXXXXXoooXXXXX X XXXX",
+"XXXoooXXXXooXXXXXXXXXXXXX",
+"XXXooooXXXoXXXXXXXXXXXXXX",
+"XXXXXXoXX.....XXXXXXXXXXX",
+"XXXXXXo....X.....XXXXXXXX",
+"XXXXXX.....XX....XXXXXXXX",
+"XXXXXX..X..XX..X..XooXXXX",
+"XXXXX.........XX..oXXXXXX",
+"oooXX............XoooXXXX",
+"oooXX.XX.........XXXXXXXX",
+"ooXXX....X....XX..XXXXXXX",
+"XXXXX..........XX.XXXXXXX",
+"XXXXX..XX.........XXXXXXX",
+"XXXXX.XXX........XXXooXXX",
+"XXXXX.....XX..XXXXXoooXXX",
+"XXXXXX....XX.XXXXXooXXXXX",
+"XoXXXXXX.....XXXXXoXXXXXX",
+"ooooooooX...XXXXXoXXXXXXX",
+"oooXXXXoooXXXXXXXoXXXXXXX",
+"XXXXXXXooooooXXXXooooooXX",
+"XXXXXoooXXXooooooooooooXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX"
+};
+/* XPM */
+static char *pm_64[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 4 1",
+/* colors */
+" c #000000",
+". c #B00000",
+"X c #EAEAEA",
+"o c #063A30",
+/* pixels */
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXX.XXXXXXXXXXXXXXXXXXXXX",
+"XX..XXXXXXXXXXXXXXXXXXXXX",
+"X...XXXXXXXXoXXXX X XXXX",
+"X.X.XXXXXXXoXXX XXX",
+"X....XXXXXoXXXXXX X XXXX",
+"XXX.XXXXXXoXXXXXX X XXXX",
+"XXXXXXXXXXoXXXXXX XXX XXX",
+"XXXXXXXXXXoXXXXX XXX XXX",
+"XXXXXXXXXXooXXXX XXXX XXX",
+"XXXXXXXXXXooXXXX XXX XXX",
+"XXXXXXXXXXooXXXXXoXXXXXXX",
+"XXXXooXXXXoooXXXXoXXXXXXX",
+"XXXoooXoXXXooXXXooXXXXXXX",
+"XXXoXXXXoXXXoXXXXXXXXXoXX",
+"XXoooXXXXoXXooXXXXXXooooX",
+"XXXXXXXXXXoXXoXXooooooXXX",
+"XXXXXXXXXXoXoooooXoXXooXX",
+"XXXXXXooooooXooXoXXoXXooX",
+"XXXXoooXoooXXXoXooXXXoXoX",
+"XXXooXoooooXXXooXXXXXoXoX",
+"XXoooXoooXoooooXXoooXXooX",
+"XoXXoXooXXooXXooooXooXXoX",
+"XoXXXXoXXXoXXXooXXXXXoooX",
+"XoXoXXooXXooooooXXXXXXooX",
+"XoooXXooXXXooXooXXXXXXoXX",
+"XXoooXooXXXoXXXoXXXoXXXXX",
+"XXoXXXXoXXXoXXXooXooXXXXX",
+"XXXXXoooXXXooooooooXXooXX",
+"XXXXXXXooXXooXXXooXXoXXXX",
+"XXXXXXXXoXXoXXXXooXoXXXoX",
+"XXXXXXXXooXooooooooXXXoXX",
+"XXXXXoXXXoooXXXXXXXXXoXXX",
+"XXXXXXXXXXoXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX"
+};
+/* XPM */
+static char *pm_71[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 4 1",
+/* colors */
+" c #000000",
+". c #B00000",
+"X c #EAEAEA",
+"o c #063A30",
+/* pixels */
+"XXXXXX.XXXXXXXXXXXXXXXXXX",
+"XXX....XXXXXXXXXXXXXXXXXX",
+"XXXX.X...XXXXXXXXXXXXXXXX",
+"XXXX.X.XXXXXXXXXXXoXXXX X",
+"XXXX.X.....XXXXXXXoXXX X",
+"XXX......XXXXXXXoooXoX X",
+"X....XXX.XXXXXXXXooooXX X",
+"XXX.......XXXXXXXoooXXX X",
+"XX...XX..X..XXXXXooXXXX ",
+"X..X.....XXXXXXXXoXXXXXXX",
+"XXXX.XX..XXXXXXoooooXXXXX",
+"XXXX....XXXXXXXooooooXXXX",
+"XXXXXXXXXXXXXXXooXoooXXXX",
+"XXXXXXXXXXXXXXXooooXXXXXX",
+"XXXXXXXXXXXXXXoooXXXooooX",
+"XXXooooXXXXXXXXXXXooXXXoX",
+"XXooXXooXXX.....XXoooXooX",
+"XXooooooXX..XXX..XoXoooXX",
+"XXXXXoX....XXXX..XXXXXXXX",
+"XXXXXX..XX..XX.....XXXXXX",
+"XXXXXX.XXX......XX.XXXXXX",
+"XXXXXX.XXXX.XX.XXX..XXXXX",
+"XXXXXXX.XXX....XXX..XXXXX",
+"XXXXXXX.XX......X..XXXXXX",
+"XXXXXXX.....XX....XXoooXX",
+"XXXXXXXXXXX.XXX..XXooXooX",
+"XXXXXXXXXXX.XXX.XoXoXXooX",
+"XXXXXXXXXXX....XXoXoXXoXX",
+"XXoooooooooooXoXXoooooXXX",
+"XooooXXoooooooooXXooooXXX",
+"ooooXXXXooXoooooooXoooXXX",
+"oXoXXXXooooXXooooooooooXX",
+"oooXXXXoooXXXXXXXXoXooooX",
+"ooXXXXXXoXXXXXXXXXXXXXooX",
+"XXXXXXXXXXXXXXXXXXXXXXXoX"
+};
+/* XPM */
+static char *pm_72[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 4 1",
+/* colors */
+" c #000000",
+". c #B00000",
+"X c #EAEAEA",
+"o c #063A30",
+/* pixels */
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXX.XXXXXXXXXXXXX XX",
+"X.......XXXoXXXXXXX X XX",
+"XXXX..XXXXXooXXXXXX XX XX",
+"XXX.....XXXXoXXXooXXX XXX",
+"XXX.XXX.XXXXooXXoXXX XXXX",
+"XXX.....XXXXXoXXoXX XX",
+"XX....X.XXXXXoXoooXXXXXXX",
+"X..XX...XXXXXoXoooXXXXXXX",
+"XXXXX..XXXXXXooXXoXXXXXXX",
+"XX.......XXXXooooXXXXXXXX",
+"XXXXXXXXXXXXXoooXXXXXoooX",
+"XXoooXXXooXXXooXXXXXoooXX",
+"XXXXooXooXXXXooXXXXoooooX",
+"XXXXXoooXXXXXXXXXXooXXXXX",
+"XXXXXooXXXXX..XXXXoXXXXXX",
+"XXXXXooXXX.....XXXoooXXXX",
+"XXXXXXoXX...XX..XooXXXXXX",
+"XXXXXXoXX.X..XX.XoXXXXXXX",
+"XXXXXXoXX.XX.XX..XXXXXXXX",
+"XXXXXXoX...X..XX.XXXXXXXX",
+"XooXXXXX.X.....X.XXXXXXXX",
+"XXooXXXX.XX....X.XXXXXXXX",
+"XXXXoXXX.XX..X....XXXXXXX",
+"XXXXooXo....XX....XooXXXX",
+"XXXXXoooXX..XXX..XooXXXXX",
+"XXXXXooXXXX.....XXoXXXXXX",
+"XXooXXooXXoooXXXXXXXXXXXX",
+"XXXoXXXooXXXooooooXXXXXXX",
+"XXXXoXXXoXXXXXXXXXXXXXXXX",
+"XXXXXoXXooXXXooXXXXXXXXXX",
+"XXXXXXoXooooooooooXXXXXXX",
+"XXXXXXooooXXXXXXooXXXXXXX",
+"XXXXXXXXXXXXXXXXXoXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX"
+};
+/* XPM */
+static char *pm_73[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 4 1",
+/* colors */
+" c #000000",
+". c #B00000",
+"X c #EAEAEA",
+"o c #063A30",
+/* pixels */
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXX.XXXX.XXXXXXXoXXXX X",
+"XXX..XXX.XXXXXXXooXXXXX X",
+"XXX...XX....XXXXXooXXXX X",
+"X...XX...XXXXXXoooooX X",
+"XXX..XXX.XXXXXXoXXoXXXXX ",
+"XXX...X...XXXXXooXoXX X ",
+"X...XX.XX..XXXXXoooXXX X",
+"XXX...XXXX..XXXXoooXXXXXX",
+"XXX..XXXXXX..XXXXooXXXXXX",
+"XXX.XXXXXXXXXXXXXooXXXXXX",
+"XXXXXXXXXXXXXXXXXooXXXXXX",
+"XoooooXXXXXoooooooooXXXXX",
+"oooXXoXXXXXXoXXooXXoXXXXX",
+"XoooooXXXXXXooXooXXoXXXXX",
+"XXXXXXXXX..XXoooooooXXXXX",
+"XXXXXX...X..XXXoXXXoXXXXX",
+"XXXXX..XXXX..XXXXooooXXXX",
+"XXXXX.XXXXXX.XXXooXXoXXXX",
+"XXXX.....XXX..XXoooooXXXX",
+"XXX..X.....XX..XXXooXXXXX",
+"XXX..X..XX.XXX.XXXXXXXXXX",
+"XXX......XX.XX.XXXXXXXXXX",
+"XXX.X.XX..X.XX.XXXXXXXXXX",
+"XXX.X..X..X.XX.XXXXXoooXX",
+"XXX............XXXXooXoXX",
+"XXXX....X....XXXoXoXXooXX",
+"XXXXX.......XXXooooXooXXX",
+"ooooooooooXXXXXXoooooXXXX",
+"oXXooXooooooooooooooXXXXX",
+"XXooXXoXXooXXXXXoooooXXXX",
+"ooXXXXoXooXXXXXXXXoooooXX",
+"XXXXXXoooXXXXXXXXXXXooooo",
+"XXXXXXXoXXXXXXXXXXXXXXXXo",
+"XXXXXXXXXXXXXXXXXXXXXXXXX"
+};
+/* XPM */
+static char *pm_74[] = {
+/* width height ncolors chars_per_pixel */
+"25 35 4 1",
+/* colors */
+" c #000000",
+". c #B00000",
+"X c #EAEAEA",
+"o c #063A30",
+/* pixels */
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXX...XXXXXXXXXXXXX XX",
+"XXX......XXXoXXXXXXXX XX",
+"XXXX..X.XXXXoXXXXXXXX XX",
+"XXXXX...XXXXooXXXXXX X XX",
+"XXXX....XXXXooXXXXXX ",
+"XX..XXX..XXXooXXXXXX X",
+"X..XXXXX..XoXoXXXXXXXXX X",
+"X.XXX...XX.oooXXXXXXXXXXX",
+"XXXXXXXXXXXXooXXXXXooooXX",
+"XXXX....XXXXoXXXXXooXXooX",
+"XXXXXXXXXXXoooooXooXXXXoX",
+"XXXXXXXXXXXoooXXXoooooooX",
+"XXXXXXoooXooXXXXXooXXXXXX",
+"XXXXXooXoooXXXXXooooXXXXX",
+"XXXXXooooooXXXXXooXooXXXX",
+"XXXXXoXXooXXXXXXoXXoXXXXX",
+"XXXXXXXXoX......ooooXXXXX",
+"XXXXXXXXXX.XXXX.XXXXXXXXX",
+"XXXXXXX....XXX....XXXXXXX",
+"XXXXXX..X....X.....XXXXXX",
+"XXXXXX..XX.....XXX.XXXXXX",
+"XXXXXXX.XX.XX..XXX.XXXXXX",
+"XXXXXXX....X...XXX.XXXXXX",
+"XXXXXXXXX...X..XX..XXXXXX",
+"XXXXXooXX.XXX.....XXXXXXX",
+"XXooooooX.XXX.XXXXXooXXXX",
+"XXoXXXXoo.....XXooooooXXX",
+"XXoooXXXooXXXXXXoXXXXooXX",
+"XXXXooooooXoooXooXXXXXooX",
+"XXXXXXXXooooXoooooooXXXoX",
+"XXXXXXXXXooXXoooXXXoooooX",
+"XXXXXXXXXooXXXoXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX"
+};
+/* XPM */
+static char *pm_101[] = {
+/* width height ncolors chars_per_pixel */
+"35 35 3 1",
+/* colors */
+" c #000000",
+". c None",
+"X c #FFFFFF",
+/* pixels */
+"............. .............",
+".......... XXXXXXXXX ..........",
+"........ XXXXXXXXXXXXXXX ........",
+"....... XXXXXXXX XXXXXXXX .......",
+"...... XXXXXXXXXX XXXXXXXX ......",
+"..... XXXXXXXXXXX XXXXXXXXX .....",
+".... XXXXXXXXXXXX XXXXXXXXXXX ....",
+"... XXXXXXXXXXXXX X XXXXXXXXX ...",
+".. XXXXXXXXXXXXXX XXXXXXXXX ..",
+".. XXXXXXXXX XXXXXXXXX ..",
+". XXXXXXXXXXXX XXXXXXXXXXXXXX .",
+". XXXXXXXXXXXXXXX X XXXXXXXXXX .",
+". XXXXXXXXXXXXXX XXXXXXXXX .",
+" XXXXXXXXXX X XXXXXXXXX ",
+" XXXXXXXXXX XX XXXX XXXXXXXX ",
+" XXXXXXXXXX XX X XXXXXXXX ",
+" XXXXXXXXXX XXXXXXXX ",
+" XXXXXXXXXXX XX XXX XXXXXXXXX ",
+" XXXXXXXXXXXX XXXXXXXXXX ",
+" XXXXXXXXXXXXX X XX XXXXXXXXXXX ",
+" XXXXXXXXXXXXXX XXXXXXXXXXXXX ",
+" XXXXXXXXXXXXX X XXXXXXXXXXXX ",
+". XXXXXXXXXXX X XX XXXXXXXXXX .",
+". XXXXXXXXXX XX XX XXXXXXXXX .",
+". XXXXXXXXX XXX XXX XXXXXXXX .",
+".. XXXXXXX XX XXX XXXXX ..",
+".. XXXXX XXXX XXXX XXXX ..",
+"... XXXXXXXXXXX XXXXXXXXXXXX ...",
+".... XXXXXXXXXXX XXXXXXXXXXX ....",
+"..... XXXXXXXXXXX XXXXXXXXXX .....",
+"...... XXXXXXXXXX XXXXXXXXXX ......",
+"....... XXXXXXXXXXXXXXXXXXX .......",
+"........ XXXXXXXXXXXXXXX ........",
+".......... XXXXXXXXX ..........",
+"............. ............."
+};
+/* XPM */
+static char *pm_102[] = {
+/* width height ncolors chars_per_pixel */
+"35 35 3 1",
+/* colors */
+" c #000000",
+". c None",
+"X c #FFFFFF",
+/* pixels */
+"............. .............",
+".......... XXXXXXXXX ..........",
+"........ XXXXXXXXXXXXXXX ........",
+"....... XXXXXX XXXXXXXXXXX .......",
+"...... XXXXXXXX XXXXXXXXX ......",
+"..... XXXXXXXXXX XXXXXXXX .....",
+".... XXXXXXXXXXXX XXXXXXXXXX ....",
+"... XXXXXXXXXXXXX XXXXXXXXXXX ...",
+".. XXXXXXXXXXXXXX XXXXXXXXXXXXX ..",
+".. XXXXXXXXXXXXXX X XXXXXXXXXXX ..",
+". XXXXXXXXXXXXXXX XXXXXXXXXXX .",
+". XXXXXXXXXXXXXX XXXXXXXXXX .",
+". XXXXXXXXXXX X XXXXXXXXXXXX .",
+" XXXXXXXXXXXXXXXX X XXXXXXXXXXXX ",
+" XXXXXXXXXXXXXXXX XX XXXXXXXXXXX ",
+" XXXXXXXXXXX XXXX XXXXXXXXXXX ",
+" XXXXXXXXXXX X XXXXXXX ",
+" XXXXXXXXXXXX X XX XXXXXX ",
+" XXXXXXXXXXX XX XXX XXXXXX ",
+" XXXXXX XXX X XXXX XXXXXX ",
+" XXXXXXX X XXX XX XX XXXXXXX ",
+" XXXXXXX XXX X X XXXXXXX ",
+". XXXXXXX XXXX XXXXX XXXXXX .",
+". XXXXXXX X X XXXXXX XXXXXX .",
+". XXXXXXXX XXXX XXXXXX XXXXXX .",
+".. XXXXXXXX XXXXX XXXXX ..",
+".. XXXXXXXXX XXXXXXXX XXXXX ..",
+"... XXXXXXXXXXXXXXXXXXXX XXXXX ...",
+".... XXXXXXXXXXXXXXXXXXXXXXXXX ....",
+"..... XXXXXXXXXXXXXXXXXXXXXXX .....",
+"...... XXXXXXXXXXXXXXXXXXXXX ......",
+"....... XXXXXXXXXXXXXXXXXXX .......",
+"........ XXXXXXXXXXXXXXX ........",
+".......... XXXXXXXXX ..........",
+"............. ............."
+};
+/* XPM */
+static char *pm_103[] = {
+/* width height ncolors chars_per_pixel */
+"35 35 3 1",
+/* colors */
+" c #000000",
+". c None",
+"X c #FFFFFF",
+/* pixels */
+"............. .............",
+".......... XXXXXXXXX ..........",
+"........ XXXXXXXXXXXXXXX ........",
+"....... XXXXXXXXXXXXXXXXXXX .......",
+"...... XXXXXXXXXXXXXXXXXXXXX ......",
+"..... XXXXXXXXXXXXXXXXXXXXXXX .....",
+".... XXXXXXXXXXXXXXXXXXXXXXXXX ....",
+"... XXXXXXXXXXXXXXXXXX XXXXXXX ...",
+".. XXXXXXXXXXXXXXXXXX XXXXXXX ..",
+".. XXXXXXXXXXXXXX XXXXX ..",
+". XXXXXXXXXX XXXXX XXXXX .",
+". XXXXX XXXXX X XXXXX .",
+". XXXXXX XXXXXXXXX XXXXXXXXXX .",
+" XXXXXXXXXXXXXXXXXX XXXXXXXXXXXX ",
+" XXXXXXXXXX XXXXX XXXXXXXXXXXXX ",
+" XXXXXXXXXXX XXXX XXXXXXXXXXXXX ",
+" XXXXXXXXXXX XXX X XXXXXXXXXXXXX ",
+" XXXXXXXXXXXX XX XXXXXXXXXXX ",
+" XXXXXXXXXXX X XXXXXXXXX ",
+" XXXXXXXXXX X XX XX XXXXXXXX ",
+" XXXXXXX X X XX XXX XXXXXXX ",
+" XXXXXXX XXX XX XXXX XXXXXXX ",
+". XXXXXX XXX X XXX XXXXXX .",
+". XXXXXXX XXX XXXXXXX .",
+". XXXXXXXX XXXXXXXX .",
+".. XXXXXXXX XXXX XXXXXXXX ..",
+".. XXXXXXXXX XXXXXX XXXXXXXXX ..",
+"... XXXXXXXXXXXXXXXXXXXXXXXXXXX ...",
+".... XXXXXXXXXXXXXXXXXXXXXXXXX ....",
+"..... XXXXXXXXXXXXXXXXXXXXXXX .....",
+"...... XXXXXXXXXXXXXXXXXXXXX ......",
+"....... XXXXXXXXXXXXXXXXXXX .......",
+"........ XXXXXXXXXXXXXXX ........",
+".......... XXXXXXXXX ..........",
+"............. ............."
+};
+/* XPM */
+static char *pm_104[] = {
+/* width height ncolors chars_per_pixel */
+"35 35 3 1",
+/* colors */
+" c #000000",
+". c None",
+"X c #FFFFFF",
+/* pixels */
+"............. .............",
+".......... XXXXXXXXX ..........",
+"........ XXXXXXXXXXXXXXX ........",
+"....... XXXXXXXXXXXXXXXXXXX .......",
+"...... XXXXXXXXXXXXXXXXXXXXX ......",
+"..... XXXXXXXXXXXXXXXXXXXXXXX .....",
+".... XXXXXXXXXXXXXXXXXXXXXXXXX ....",
+"... XXXXXXXXXXXXXXXXXXXXXXXXXXX ...",
+".. XXXXXXXXXXXXXXXXXXXXXXXXXXXXX ..",
+".. XXXXXXXXXXXXXXX XXXXXXXXXXX ..",
+". XXXXXXXXXXXXXXXX XXXXXXXXXX .",
+". XXXXXXXXXXXXXXXXX XXXXXXXXXX .",
+". XXXXXXXXXXXX XXXX XXXXXXXXXX .",
+" XXXXXXXXXXX XXX XXXXXXXXXXXX ",
+" XXXXXXXXXXX XX XX XXXXXXXX ",
+" XXXXXXXXXXXX XX XX XXXXXXX ",
+" XXXXXXXXXXXXX XXX X XXXXXX ",
+" XXXXXXX X XXX XXXXXXXX ",
+" XXXXXXX X XXX XXXXXXXXXXX ",
+" XXXXXXXX XX XXX XXXXXXXXXXXXX ",
+" XXXXXXXXXXXXX XXX XXXXXXXXXXXXX ",
+" XXXXXXXXXXXXX X X XXXXXXXXXXXXX ",
+". XXXXXX XXXXX XX XXXXXXXXXXX .",
+". XXXXXX XXX XXX XXXXX .",
+". XXXXXX XXXX XXXXX .",
+".. XXXX X XXXXXXX XXXXX ..",
+".. XXXXX XXX XXXXXXXXXXXXXXXXX ..",
+"... XXXXXXXXXXXXXXXXXXXXXXXXXXX ...",
+".... XXXXXXXXXXXXXXXXXXXXXXXXX ....",
+"..... XXXXXXXXXXXXXXXXXXXXXXX .....",
+"...... XXXXXXXXXXXXXXXXXXXXX ......",
+"....... XXXXXXXXXXXXXXXXXXX .......",
+"........ XXXXXXXXXXXXXXX ........",
+".......... XXXXXXXXX ..........",
+"............. ............."
+};
+char **fallbackpixmaps[] = {
+pm_0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, pm_11, pm_12, pm_13, pm_14, pm_15, pm_16, pm_17, pm_18, pm_19, 0, pm_21, pm_22, pm_23, pm_24, pm_25, pm_26, pm_27, pm_28, pm_29, 0, pm_31, pm_32, pm_33, pm_34, pm_35, pm_36, pm_37, pm_38, pm_39, 0, pm_41, pm_42, pm_43, pm_44, 0, 0, 0, 0, 0, 0, pm_51, pm_52, pm_53, 0, 0, 0, 0, 0, 0, 0, pm_61, pm_62, pm_63, pm_64, 0, 0, 0, 0, 0, 0, pm_71, pm_72, pm_73, pm_74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, pm_99, 0, pm_101, pm_102, pm_103, pm_104,
+};
--- /dev/null
+++ b/game-enums.c
@@ -0,0 +1,116 @@
+char *game_print_GameState(const GameState t) {
+ if ( t == HandComplete ) return "HandComplete";
+ if ( t == Dealing ) return "Dealing";
+ if ( t == DeclaringSpecials ) return "DeclaringSpecials";
+ if ( t == Discarding ) return "Discarding";
+ if ( t == Discarded ) return "Discarded";
+ if ( t == MahJonging ) return "MahJonging";
+ return (char *)0;
+}
+
+GameState game_scan_GameState(const char *s) {
+ if ( strcmp(s,"HandComplete") == 0 ) return HandComplete;
+ if ( strcmp(s,"Dealing") == 0 ) return Dealing;
+ if ( strcmp(s,"DeclaringSpecials") == 0 ) return DeclaringSpecials;
+ if ( strcmp(s,"Discarding") == 0 ) return Discarding;
+ if ( strcmp(s,"Discarded") == 0 ) return Discarded;
+ if ( strcmp(s,"MahJonging") == 0 ) return MahJonging;
+ return -1;
+}
+
+
+char *game_print_seats(const seats t) {
+ if ( t == east ) return "east";
+ if ( t == south ) return "south";
+ if ( t == west ) return "west";
+ if ( t == north ) return "north";
+ if ( t == noseat ) return "noseat";
+ return (char *)0;
+}
+
+seats game_scan_seats(const char *s) {
+ if ( strcmp(s,"east") == 0 ) return east;
+ if ( strcmp(s,"south") == 0 ) return south;
+ if ( strcmp(s,"west") == 0 ) return west;
+ if ( strcmp(s,"north") == 0 ) return north;
+ if ( strcmp(s,"noseat") == 0 ) return noseat;
+ return -1;
+}
+
+
+char *game_print_Whence(const Whence t) {
+ if ( t == FromNone ) return "FromNone";
+ if ( t == FromWall ) return "FromWall";
+ if ( t == FromDiscard ) return "FromDiscard";
+ if ( t == FromLoose ) return "FromLoose";
+ if ( t == FromRobbedKong ) return "FromRobbedKong";
+ return (char *)0;
+}
+
+Whence game_scan_Whence(const char *s) {
+ if ( strcmp(s,"FromNone") == 0 ) return FromNone;
+ if ( strcmp(s,"FromWall") == 0 ) return FromWall;
+ if ( strcmp(s,"FromDiscard") == 0 ) return FromDiscard;
+ if ( strcmp(s,"FromLoose") == 0 ) return FromLoose;
+ if ( strcmp(s,"FromRobbedKong") == 0 ) return FromRobbedKong;
+ return -1;
+}
+
+
+char *game_print_Konging(const Konging t) {
+ if ( t == NotKonging ) return "NotKonging";
+ if ( t == AddingToPung ) return "AddingToPung";
+ if ( t == DeclaringKong ) return "DeclaringKong";
+ return (char *)0;
+}
+
+Konging game_scan_Konging(const char *s) {
+ if ( strcmp(s,"NotKonging") == 0 ) return NotKonging;
+ if ( strcmp(s,"AddingToPung") == 0 ) return AddingToPung;
+ if ( strcmp(s,"DeclaringKong") == 0 ) return DeclaringKong;
+ return -1;
+}
+
+
+char *game_print_Claims(const Claims t) {
+ if ( t == UnknownClaim ) return "UnknownClaim";
+ if ( t == NoClaim ) return "NoClaim";
+ if ( t == ChowClaim ) return "ChowClaim";
+ if ( t == PungClaim ) return "PungClaim";
+ if ( t == KongClaim ) return "KongClaim";
+ if ( t == MahJongClaim ) return "MahJongClaim";
+ if ( t == PairClaim ) return "PairClaim";
+ if ( t == SpecialSetClaim ) return "SpecialSetClaim";
+ return (char *)0;
+}
+
+Claims game_scan_Claims(const char *s) {
+ if ( strcmp(s,"UnknownClaim") == 0 ) return UnknownClaim;
+ if ( strcmp(s,"NoClaim") == 0 ) return NoClaim;
+ if ( strcmp(s,"ChowClaim") == 0 ) return ChowClaim;
+ if ( strcmp(s,"PungClaim") == 0 ) return PungClaim;
+ if ( strcmp(s,"KongClaim") == 0 ) return KongClaim;
+ if ( strcmp(s,"MahJongClaim") == 0 ) return MahJongClaim;
+ if ( strcmp(s,"PairClaim") == 0 ) return PairClaim;
+ if ( strcmp(s,"SpecialSetClaim") == 0 ) return SpecialSetClaim;
+ return -1;
+}
+
+
+char *game_print_GameFlags(const GameFlags t) {
+ if ( t == GFKong ) return "GFKong";
+ if ( t == GFKongUponKong ) return "GFKongUponKong";
+ if ( t == GFDangerousDiscard ) return "GFDangerousDiscard";
+ if ( t == GFNoChoice ) return "GFNoChoice";
+ return (char *)0;
+}
+
+GameFlags game_scan_GameFlags(const char *s) {
+ if ( strcmp(s,"GFKong") == 0 ) return GFKong;
+ if ( strcmp(s,"GFKongUponKong") == 0 ) return GFKongUponKong;
+ if ( strcmp(s,"GFDangerousDiscard") == 0 ) return GFDangerousDiscard;
+ if ( strcmp(s,"GFNoChoice") == 0 ) return GFNoChoice;
+ return -1;
+}
+
+
--- /dev/null
+++ b/game-enums.h
@@ -0,0 +1,18 @@
+char *game_print_GameState(const GameState t);
+GameState game_scan_GameState(const char *s);
+
+char *game_print_seats(const seats t);
+seats game_scan_seats(const char *s);
+
+char *game_print_Whence(const Whence t);
+Whence game_scan_Whence(const char *s);
+
+char *game_print_Konging(const Konging t);
+Konging game_scan_Konging(const char *s);
+
+char *game_print_Claims(const Claims t);
+Claims game_scan_Claims(const char *s);
+
+char *game_print_GameFlags(const GameFlags t);
+GameFlags game_scan_GameFlags(const char *s);
+
--- /dev/null
+++ b/player-enums.c
@@ -0,0 +1,122 @@
+char *player_print_TileSetType(const TileSetType t) {
+ if ( t == Empty ) return "Empty";
+ if ( t == Chow ) return "Chow";
+ if ( t == Pung ) return "Pung";
+ if ( t == Kong ) return "Kong";
+ if ( t == ClosedPung ) return "ClosedPung";
+ if ( t == ClosedKong ) return "ClosedKong";
+ if ( t == ClosedChow ) return "ClosedChow";
+ if ( t == Pair ) return "Pair";
+ if ( t == ClosedPair ) return "ClosedPair";
+ return (char *)0;
+}
+
+TileSetType player_scan_TileSetType(const char *s) {
+ if ( strcmp(s,"Empty") == 0 ) return Empty;
+ if ( strcmp(s,"Chow") == 0 ) return Chow;
+ if ( strcmp(s,"Pung") == 0 ) return Pung;
+ if ( strcmp(s,"Kong") == 0 ) return Kong;
+ if ( strcmp(s,"ClosedPung") == 0 ) return ClosedPung;
+ if ( strcmp(s,"ClosedKong") == 0 ) return ClosedKong;
+ if ( strcmp(s,"ClosedChow") == 0 ) return ClosedChow;
+ if ( strcmp(s,"Pair") == 0 ) return Pair;
+ if ( strcmp(s,"ClosedPair") == 0 ) return ClosedPair;
+ return -1;
+}
+
+
+char *player_print_PlayerOption(const PlayerOption t) {
+ if ( t == POUnknown ) return "Unknown";
+ if ( t == POInfoTiles ) return "InfoTiles";
+ if ( t == PODelayTime ) return "DelayTime";
+ if ( t == POLocalTimeouts ) return "LocalTimeouts";
+ if ( t == PONumOptions ) return "NumOptions";
+ return (char *)0;
+}
+
+PlayerOption player_scan_PlayerOption(const char *s) {
+ if ( strcmp(s,"Unknown") == 0 ) return POUnknown;
+ if ( strcmp(s,"InfoTiles") == 0 ) return POInfoTiles;
+ if ( strcmp(s,"DelayTime") == 0 ) return PODelayTime;
+ if ( strcmp(s,"LocalTimeouts") == 0 ) return POLocalTimeouts;
+ if ( strcmp(s,"NumOptions") == 0 ) return PONumOptions;
+ return -1;
+}
+
+
+char *player_print_PlayerFlags(const PlayerFlags t) {
+ if ( t == Hidden ) return "Hidden";
+ if ( t == MahJongged ) return "MahJongged";
+ if ( t == HandDeclared ) return "HandDeclared";
+ if ( t == NoDiscard ) return "NoDiscard";
+ if ( t == OriginalCall ) return "OriginalCall";
+ if ( t == Calling ) return "Calling";
+ return (char *)0;
+}
+
+PlayerFlags player_scan_PlayerFlags(const char *s) {
+ if ( strcmp(s,"Hidden") == 0 ) return Hidden;
+ if ( strcmp(s,"MahJongged") == 0 ) return MahJongged;
+ if ( strcmp(s,"HandDeclared") == 0 ) return HandDeclared;
+ if ( strcmp(s,"NoDiscard") == 0 ) return NoDiscard;
+ if ( strcmp(s,"OriginalCall") == 0 ) return OriginalCall;
+ if ( strcmp(s,"Calling") == 0 ) return Calling;
+ return -1;
+}
+
+
+char *player_print_DangerSignals(const DangerSignals t) {
+ if ( t == DangerBamboo ) return "DangerBamboo";
+ if ( t == DangerCharacter ) return "DangerCharacter";
+ if ( t == DangerCircle ) return "DangerCircle";
+ if ( t == DangerWind ) return "DangerWind";
+ if ( t == DangerDragon ) return "DangerDragon";
+ if ( t == DangerHonour ) return "DangerHonour";
+ if ( t == DangerGreen ) return "DangerGreen";
+ if ( t == DangerTerminal ) return "DangerTerminal";
+ if ( t == DangerEnd ) return "DangerEnd";
+ return (char *)0;
+}
+
+DangerSignals player_scan_DangerSignals(const char *s) {
+ if ( strcmp(s,"DangerBamboo") == 0 ) return DangerBamboo;
+ if ( strcmp(s,"DangerCharacter") == 0 ) return DangerCharacter;
+ if ( strcmp(s,"DangerCircle") == 0 ) return DangerCircle;
+ if ( strcmp(s,"DangerWind") == 0 ) return DangerWind;
+ if ( strcmp(s,"DangerDragon") == 0 ) return DangerDragon;
+ if ( strcmp(s,"DangerHonour") == 0 ) return DangerHonour;
+ if ( strcmp(s,"DangerGreen") == 0 ) return DangerGreen;
+ if ( strcmp(s,"DangerTerminal") == 0 ) return DangerTerminal;
+ if ( strcmp(s,"DangerEnd") == 0 ) return DangerEnd;
+ return -1;
+}
+
+
+char *player_print_ChowPosition(const ChowPosition t) {
+ if ( t == Lower ) return "Lower";
+ if ( t == Middle ) return "Middle";
+ if ( t == Upper ) return "Upper";
+ if ( t == AnyPos ) return "AnyPos";
+ return (char *)0;
+}
+
+ChowPosition player_scan_ChowPosition(const char *s) {
+ if ( strcmp(s,"Lower") == 0 ) return Lower;
+ if ( strcmp(s,"Middle") == 0 ) return Middle;
+ if ( strcmp(s,"Upper") == 0 ) return Upper;
+ if ( strcmp(s,"AnyPos") == 0 ) return AnyPos;
+ return -1;
+}
+
+
+char *player_print_MJSpecialHandFlags(const MJSpecialHandFlags t) {
+ if ( t == MJSevenPairs ) return "MJSevenPairs";
+ return (char *)0;
+}
+
+MJSpecialHandFlags player_scan_MJSpecialHandFlags(const char *s) {
+ if ( strcmp(s,"MJSevenPairs") == 0 ) return MJSevenPairs;
+ return -1;
+}
+
+
--- /dev/null
+++ b/player-enums.h
@@ -0,0 +1,18 @@
+char *player_print_TileSetType(const TileSetType t);
+TileSetType player_scan_TileSetType(const char *s);
+
+char *player_print_PlayerOption(const PlayerOption t);
+PlayerOption player_scan_PlayerOption(const char *s);
+
+char *player_print_PlayerFlags(const PlayerFlags t);
+PlayerFlags player_scan_PlayerFlags(const char *s);
+
+char *player_print_DangerSignals(const DangerSignals t);
+DangerSignals player_scan_DangerSignals(const char *s);
+
+char *player_print_ChowPosition(const ChowPosition t);
+ChowPosition player_scan_ChowPosition(const char *s);
+
+char *player_print_MJSpecialHandFlags(const MJSpecialHandFlags t);
+MJSpecialHandFlags player_scan_MJSpecialHandFlags(const char *s);
+
--- /dev/null
+++ b/pmsg_size.c
@@ -0,0 +1,1167 @@
+static int pmsg_size[] = {
+0,
+-sizeof(PMsgSaveStateMsg),
+-sizeof(PMsgLoadStateMsg),
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-sizeof(PMsgConnectMsg),
+sizeof(PMsgRequestReconnectMsg),
+-sizeof(PMsgAuthInfoMsg),
+-sizeof(PMsgNewAuthInfoMsg),
+sizeof(PMsgDisconnectMsg),
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+sizeof(PMsgDeclareSpecialMsg),
+0,
+0,
+-sizeof(PMsgRequestPauseMsg),
+sizeof(PMsgReadyMsg),
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+sizeof(PMsgDiscardMsg),
+sizeof(PMsgNoClaimMsg),
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+sizeof(PMsgPungMsg),
+0,
+sizeof(PMsgFormClosedPungMsg),
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+sizeof(PMsgKongMsg),
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+sizeof(PMsgDeclareClosedKongMsg),
+sizeof(PMsgAddToPungMsg),
+0,
+0,
+0,
+0,
+0,
+sizeof(PMsgQueryMahJongMsg),
+0,
+0,
+sizeof(PMsgChowMsg),
+0,
+sizeof(PMsgFormClosedChowMsg),
+0,
+0,
+0,
+0,
+0,
+0,
+sizeof(PMsgDeclareWashOutMsg),
+sizeof(PMsgMahJongMsg),
+0,
+sizeof(PMsgPairMsg),
+sizeof(PMsgFormClosedPairMsg),
+0,
+sizeof(PMsgShowTilesMsg),
+sizeof(PMsgSpecialSetMsg),
+sizeof(PMsgFormClosedSpecialSetMsg),
+0,
+0,
+-sizeof(PMsgSetPlayerOptionMsg),
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-sizeof(PMsgSetGameOptionMsg),
+sizeof(PMsgQueryGameOptionMsg),
+sizeof(PMsgListGameOptionsMsg),
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+sizeof(PMsgChangeManagerMsg),
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-sizeof(PMsgSendMessageMsg),
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+sizeof(PMsgSwapTileMsg),
+};
+
+int pmsg_size_of(PlayerMsgType t) { return pmsg_size[t]; }
+
+PMsgMsg *pmsg_deepcopy(PMsgMsg *m) {
+ PMsgMsg *n;
+ int size;
+ char *mc,*nc;
+
+ size = pmsg_size_of(m->type);
+ if ( size < 0 ) size *= -1;
+ n = (PMsgMsg *)malloc(size);
+ if ( ! n ) return n;
+
+ memcpy((void *)n,(const void *)m,size);
+ switch ( m->type ) {
+ case PMsgNewAuthInfo:
+ mc = ((PMsgNewAuthInfoMsg *)m)->authdata;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((PMsgNewAuthInfoMsg *)n)->authdata = nc;
+ break;
+ case PMsgAuthInfo:
+ mc = ((PMsgAuthInfoMsg *)m)->authdata;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((PMsgAuthInfoMsg *)n)->authdata = nc;
+ break;
+ case PMsgSendMessage:
+ mc = ((PMsgSendMessageMsg *)m)->text;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((PMsgSendMessageMsg *)n)->text = nc;
+ break;
+ case PMsgSetGameOption:
+ mc = ((PMsgSetGameOptionMsg *)m)->optvalue;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((PMsgSetGameOptionMsg *)n)->optvalue = nc;
+ break;
+ case PMsgSaveState:
+ mc = ((PMsgSaveStateMsg *)m)->filename;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((PMsgSaveStateMsg *)n)->filename = nc;
+ break;
+ case PMsgSetPlayerOption:
+ mc = ((PMsgSetPlayerOptionMsg *)m)->text;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((PMsgSetPlayerOptionMsg *)n)->text = nc;
+ break;
+ case PMsgLoadState:
+ mc = ((PMsgLoadStateMsg *)m)->filename;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((PMsgLoadStateMsg *)n)->filename = nc;
+ break;
+ case PMsgRequestPause:
+ mc = ((PMsgRequestPauseMsg *)m)->reason;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((PMsgRequestPauseMsg *)n)->reason = nc;
+ break;
+ case PMsgConnect:
+ mc = ((PMsgConnectMsg *)m)->name;
+ if ( mc ) {
+ nc = (char *)malloc(strlen(mc)+1);
+ if ( ! nc ) return NULL;
+ strcpy(nc,mc);
+ } else {
+ nc = NULL;
+ }
+ ((PMsgConnectMsg *)n)->name = nc;
+ break;
+ default:
+ ;
+ }
+ return n;
+}
+
+void pmsg_deepfree(PMsgMsg *m) {
+ switch ( m->type ) {
+ case PMsgNewAuthInfo:
+ if ( ((PMsgNewAuthInfoMsg *)m)->authdata )
+ free((void *)((PMsgNewAuthInfoMsg *)m)->authdata);
+ break;
+ case PMsgAuthInfo:
+ if ( ((PMsgAuthInfoMsg *)m)->authdata )
+ free((void *)((PMsgAuthInfoMsg *)m)->authdata);
+ break;
+ case PMsgSendMessage:
+ if ( ((PMsgSendMessageMsg *)m)->text )
+ free((void *)((PMsgSendMessageMsg *)m)->text);
+ break;
+ case PMsgSetGameOption:
+ if ( ((PMsgSetGameOptionMsg *)m)->optvalue )
+ free((void *)((PMsgSetGameOptionMsg *)m)->optvalue);
+ break;
+ case PMsgSaveState:
+ if ( ((PMsgSaveStateMsg *)m)->filename )
+ free((void *)((PMsgSaveStateMsg *)m)->filename);
+ break;
+ case PMsgSetPlayerOption:
+ if ( ((PMsgSetPlayerOptionMsg *)m)->text )
+ free((void *)((PMsgSetPlayerOptionMsg *)m)->text);
+ break;
+ case PMsgLoadState:
+ if ( ((PMsgLoadStateMsg *)m)->filename )
+ free((void *)((PMsgLoadStateMsg *)m)->filename);
+ break;
+ case PMsgRequestPause:
+ if ( ((PMsgRequestPauseMsg *)m)->reason )
+ free((void *)((PMsgRequestPauseMsg *)m)->reason);
+ break;
+ case PMsgConnect:
+ if ( ((PMsgConnectMsg *)m)->name )
+ free((void *)((PMsgConnectMsg *)m)->name);
+ break;
+ default:
+ ;
+ }
+ free((void *)m);
+}
+
--- /dev/null
+++ b/pmsg_union.h
@@ -0,0 +1,39 @@
+typedef union _PMsgUnion {
+ /* Note that this type field relies on the fact that all
+ messages have type as their first field */
+PlayerMsgType type;
+PMsgSaveStateMsg savestate;
+PMsgLoadStateMsg loadstate;
+PMsgConnectMsg connect;
+PMsgRequestReconnectMsg requestreconnect;
+PMsgAuthInfoMsg authinfo;
+PMsgNewAuthInfoMsg newauthinfo;
+PMsgDisconnectMsg disconnect;
+PMsgDeclareSpecialMsg declarespecial;
+PMsgRequestPauseMsg requestpause;
+PMsgReadyMsg ready;
+PMsgDiscardMsg discard;
+PMsgNoClaimMsg noclaim;
+PMsgPungMsg pung;
+PMsgFormClosedPungMsg formclosedpung;
+PMsgKongMsg kong;
+PMsgDeclareClosedKongMsg declareclosedkong;
+PMsgAddToPungMsg addtopung;
+PMsgQueryMahJongMsg querymahjong;
+PMsgChowMsg chow;
+PMsgFormClosedChowMsg formclosedchow;
+PMsgDeclareWashOutMsg declarewashout;
+PMsgMahJongMsg mahjong;
+PMsgPairMsg pair;
+PMsgFormClosedPairMsg formclosedpair;
+PMsgShowTilesMsg showtiles;
+PMsgSpecialSetMsg specialset;
+PMsgFormClosedSpecialSetMsg formclosedspecialset;
+PMsgSetPlayerOptionMsg setplayeroption;
+PMsgSetGameOptionMsg setgameoption;
+PMsgQueryGameOptionMsg querygameoption;
+PMsgListGameOptionsMsg listgameoptions;
+PMsgChangeManagerMsg changemanager;
+PMsgSendMessageMsg sendmessage;
+PMsgSwapTileMsg swaptile;
+} PMsgUnion;
--- /dev/null
+++ b/protocol-enums.c
@@ -0,0 +1,268 @@
+char *protocol_print_GameOption(const GameOption t) {
+ if ( t == GOUnknown ) return "Unknown";
+ if ( t == GOTimeout ) return "Timeout";
+ if ( t == GOTimeoutGrace ) return "TimeoutGrace";
+ if ( t == GOScoreLimit ) return "ScoreLimit";
+ if ( t == GONoLimit ) return "NoLimit";
+ if ( t == GOMahJongScore ) return "MahJongScore";
+ if ( t == GOSevenPairs ) return "SevenPairs";
+ if ( t == GOSevenPairsVal ) return "SevenPairsVal";
+ if ( t == GOFlowers ) return "Flowers";
+ if ( t == GOFlowersLoose ) return "FlowersLoose";
+ if ( t == GOFlowersOwnEach ) return "FlowersOwnEach";
+ if ( t == GOFlowersOwnBoth ) return "FlowersOwnBoth";
+ if ( t == GOFlowersBouquet ) return "FlowersBouquet";
+ if ( t == GODeadWall ) return "DeadWall";
+ if ( t == GODeadWall16 ) return "DeadWall16";
+ if ( t == GOConcealedFully ) return "ConcealedFully";
+ if ( t == GOConcealedAlmost ) return "ConcealedAlmost";
+ if ( t == GOLosersPurity ) return "LosersPurity";
+ if ( t == GOKongHas3Types ) return "KongHas3Types";
+ if ( t == GOEastDoubles ) return "EastDoubles";
+ if ( t == GOLosersSettle ) return "LosersSettle";
+ if ( t == GODiscDoubles ) return "DiscDoubles";
+ if ( t == GOShowOnWashout ) return "ShowOnWashout";
+ if ( t == GONumRounds ) return "NumRounds";
+ if ( t == GOEnd ) return "End";
+ return (char *)0;
+}
+
+GameOption protocol_scan_GameOption(const char *s) {
+ if ( strcmp(s,"Unknown") == 0 ) return GOUnknown;
+ if ( strcmp(s,"Timeout") == 0 ) return GOTimeout;
+ if ( strcmp(s,"TimeoutGrace") == 0 ) return GOTimeoutGrace;
+ if ( strcmp(s,"ScoreLimit") == 0 ) return GOScoreLimit;
+ if ( strcmp(s,"NoLimit") == 0 ) return GONoLimit;
+ if ( strcmp(s,"MahJongScore") == 0 ) return GOMahJongScore;
+ if ( strcmp(s,"SevenPairs") == 0 ) return GOSevenPairs;
+ if ( strcmp(s,"SevenPairsVal") == 0 ) return GOSevenPairsVal;
+ if ( strcmp(s,"Flowers") == 0 ) return GOFlowers;
+ if ( strcmp(s,"FlowersLoose") == 0 ) return GOFlowersLoose;
+ if ( strcmp(s,"FlowersOwnEach") == 0 ) return GOFlowersOwnEach;
+ if ( strcmp(s,"FlowersOwnBoth") == 0 ) return GOFlowersOwnBoth;
+ if ( strcmp(s,"FlowersBouquet") == 0 ) return GOFlowersBouquet;
+ if ( strcmp(s,"DeadWall") == 0 ) return GODeadWall;
+ if ( strcmp(s,"DeadWall16") == 0 ) return GODeadWall16;
+ if ( strcmp(s,"ConcealedFully") == 0 ) return GOConcealedFully;
+ if ( strcmp(s,"ConcealedAlmost") == 0 ) return GOConcealedAlmost;
+ if ( strcmp(s,"LosersPurity") == 0 ) return GOLosersPurity;
+ if ( strcmp(s,"KongHas3Types") == 0 ) return GOKongHas3Types;
+ if ( strcmp(s,"EastDoubles") == 0 ) return GOEastDoubles;
+ if ( strcmp(s,"LosersSettle") == 0 ) return GOLosersSettle;
+ if ( strcmp(s,"DiscDoubles") == 0 ) return GODiscDoubles;
+ if ( strcmp(s,"ShowOnWashout") == 0 ) return GOShowOnWashout;
+ if ( strcmp(s,"NumRounds") == 0 ) return GONumRounds;
+ if ( strcmp(s,"End") == 0 ) return GOEnd;
+ return -1;
+}
+
+
+char *protocol_print_GameOptionType(const GameOptionType t) {
+ if ( t == GOTBool ) return "bool";
+ if ( t == GOTInt ) return "int";
+ if ( t == GOTNat ) return "nat";
+ if ( t == GOTScore ) return "score";
+ if ( t == GOTString ) return "string";
+ return (char *)0;
+}
+
+GameOptionType protocol_scan_GameOptionType(const char *s) {
+ if ( strcmp(s,"bool") == 0 ) return GOTBool;
+ if ( strcmp(s,"int") == 0 ) return GOTInt;
+ if ( strcmp(s,"nat") == 0 ) return GOTNat;
+ if ( strcmp(s,"score") == 0 ) return GOTScore;
+ if ( strcmp(s,"string") == 0 ) return GOTString;
+ return -1;
+}
+
+
+char *protocol_print_ControllerMsgType(const ControllerMsgType t) {
+ if ( t == CMsgError ) return "CMsgError";
+ if ( t == CMsgInfoTiles ) return "CMsgInfoTiles";
+ if ( t == CMsgStateSaved ) return "CMsgStateSaved";
+ if ( t == CMsgConnectReply ) return "CMsgConnectReply";
+ if ( t == CMsgReconnect ) return "CMsgReconnect";
+ if ( t == CMsgAuthReqd ) return "CMsgAuthReqd";
+ if ( t == CMsgRedirect ) return "CMsgRedirect";
+ if ( t == CMsgPlayer ) return "CMsgPlayer";
+ if ( t == CMsgNewRound ) return "CMsgNewRound";
+ if ( t == CMsgGame ) return "CMsgGame";
+ if ( t == CMsgNewHand ) return "CMsgNewHand";
+ if ( t == CMsgPlayerDeclaresSpecial ) return "CMsgPlayerDeclaresSpecial";
+ if ( t == CMsgStartPlay ) return "CMsgStartPlay";
+ if ( t == CMsgStopPlay ) return "CMsgStopPlay";
+ if ( t == CMsgPause ) return "CMsgPause";
+ if ( t == CMsgPlayerReady ) return "CMsgPlayerReady";
+ if ( t == CMsgPlayerDraws ) return "CMsgPlayerDraws";
+ if ( t == CMsgPlayerDrawsLoose ) return "CMsgPlayerDrawsLoose";
+ if ( t == CMsgPlayerDiscards ) return "CMsgPlayerDiscards";
+ if ( t == CMsgClaimDenied ) return "CMsgClaimDenied";
+ if ( t == CMsgPlayerDoesntClaim ) return "CMsgPlayerDoesntClaim";
+ if ( t == CMsgDangerousDiscard ) return "CMsgDangerousDiscard";
+ if ( t == CMsgPlayerClaimsPung ) return "CMsgPlayerClaimsPung";
+ if ( t == CMsgPlayerPungs ) return "CMsgPlayerPungs";
+ if ( t == CMsgPlayerFormsClosedPung ) return "CMsgPlayerFormsClosedPung";
+ if ( t == CMsgPlayerClaimsKong ) return "CMsgPlayerClaimsKong";
+ if ( t == CMsgPlayerKongs ) return "CMsgPlayerKongs";
+ if ( t == CMsgPlayerDeclaresClosedKong ) return "CMsgPlayerDeclaresClosedKong";
+ if ( t == CMsgPlayerAddsToPung ) return "CMsgPlayerAddsToPung";
+ if ( t == CMsgPlayerRobsKong ) return "CMsgPlayerRobsKong";
+ if ( t == CMsgCanMahJong ) return "CMsgCanMahJong";
+ if ( t == CMsgPlayerClaimsChow ) return "CMsgPlayerClaimsChow";
+ if ( t == CMsgPlayerChows ) return "CMsgPlayerChows";
+ if ( t == CMsgPlayerFormsClosedChow ) return "CMsgPlayerFormsClosedChow";
+ if ( t == CMsgWashOut ) return "CMsgWashOut";
+ if ( t == CMsgPlayerClaimsMahJong ) return "CMsgPlayerClaimsMahJong";
+ if ( t == CMsgPlayerMahJongs ) return "CMsgPlayerMahJongs";
+ if ( t == CMsgPlayerPairs ) return "CMsgPlayerPairs";
+ if ( t == CMsgPlayerFormsClosedPair ) return "CMsgPlayerFormsClosedPair";
+ if ( t == CMsgPlayerShowsTiles ) return "CMsgPlayerShowsTiles";
+ if ( t == CMsgPlayerSpecialSet ) return "CMsgPlayerSpecialSet";
+ if ( t == CMsgPlayerFormsClosedSpecialSet ) return "CMsgPlayerFormsClosedSpecialSet";
+ if ( t == CMsgPlayerOptionSet ) return "CMsgPlayerOptionSet";
+ if ( t == CMsgHandScore ) return "CMsgHandScore";
+ if ( t == CMsgSettlement ) return "CMsgSettlement";
+ if ( t == CMsgGameOver ) return "CMsgGameOver";
+ if ( t == CMsgGameOption ) return "CMsgGameOption";
+ if ( t == CMsgChangeManager ) return "CMsgChangeManager";
+ if ( t == CMsgMessage ) return "CMsgMessage";
+ if ( t == CMsgWall ) return "CMsgWall";
+ if ( t == CMsgComment ) return "CMsgComment";
+ if ( t == CMsgSwapTile ) return "CMsgSwapTile";
+ return (char *)0;
+}
+
+ControllerMsgType protocol_scan_ControllerMsgType(const char *s) {
+ if ( strcmp(s,"CMsgError") == 0 ) return CMsgError;
+ if ( strcmp(s,"CMsgInfoTiles") == 0 ) return CMsgInfoTiles;
+ if ( strcmp(s,"CMsgStateSaved") == 0 ) return CMsgStateSaved;
+ if ( strcmp(s,"CMsgConnectReply") == 0 ) return CMsgConnectReply;
+ if ( strcmp(s,"CMsgReconnect") == 0 ) return CMsgReconnect;
+ if ( strcmp(s,"CMsgAuthReqd") == 0 ) return CMsgAuthReqd;
+ if ( strcmp(s,"CMsgRedirect") == 0 ) return CMsgRedirect;
+ if ( strcmp(s,"CMsgPlayer") == 0 ) return CMsgPlayer;
+ if ( strcmp(s,"CMsgNewRound") == 0 ) return CMsgNewRound;
+ if ( strcmp(s,"CMsgGame") == 0 ) return CMsgGame;
+ if ( strcmp(s,"CMsgNewHand") == 0 ) return CMsgNewHand;
+ if ( strcmp(s,"CMsgPlayerDeclaresSpecial") == 0 ) return CMsgPlayerDeclaresSpecial;
+ if ( strcmp(s,"CMsgStartPlay") == 0 ) return CMsgStartPlay;
+ if ( strcmp(s,"CMsgStopPlay") == 0 ) return CMsgStopPlay;
+ if ( strcmp(s,"CMsgPause") == 0 ) return CMsgPause;
+ if ( strcmp(s,"CMsgPlayerReady") == 0 ) return CMsgPlayerReady;
+ if ( strcmp(s,"CMsgPlayerDraws") == 0 ) return CMsgPlayerDraws;
+ if ( strcmp(s,"CMsgPlayerDrawsLoose") == 0 ) return CMsgPlayerDrawsLoose;
+ if ( strcmp(s,"CMsgPlayerDiscards") == 0 ) return CMsgPlayerDiscards;
+ if ( strcmp(s,"CMsgClaimDenied") == 0 ) return CMsgClaimDenied;
+ if ( strcmp(s,"CMsgPlayerDoesntClaim") == 0 ) return CMsgPlayerDoesntClaim;
+ if ( strcmp(s,"CMsgDangerousDiscard") == 0 ) return CMsgDangerousDiscard;
+ if ( strcmp(s,"CMsgPlayerClaimsPung") == 0 ) return CMsgPlayerClaimsPung;
+ if ( strcmp(s,"CMsgPlayerPungs") == 0 ) return CMsgPlayerPungs;
+ if ( strcmp(s,"CMsgPlayerFormsClosedPung") == 0 ) return CMsgPlayerFormsClosedPung;
+ if ( strcmp(s,"CMsgPlayerClaimsKong") == 0 ) return CMsgPlayerClaimsKong;
+ if ( strcmp(s,"CMsgPlayerKongs") == 0 ) return CMsgPlayerKongs;
+ if ( strcmp(s,"CMsgPlayerDeclaresClosedKong") == 0 ) return CMsgPlayerDeclaresClosedKong;
+ if ( strcmp(s,"CMsgPlayerAddsToPung") == 0 ) return CMsgPlayerAddsToPung;
+ if ( strcmp(s,"CMsgPlayerRobsKong") == 0 ) return CMsgPlayerRobsKong;
+ if ( strcmp(s,"CMsgCanMahJong") == 0 ) return CMsgCanMahJong;
+ if ( strcmp(s,"CMsgPlayerClaimsChow") == 0 ) return CMsgPlayerClaimsChow;
+ if ( strcmp(s,"CMsgPlayerChows") == 0 ) return CMsgPlayerChows;
+ if ( strcmp(s,"CMsgPlayerFormsClosedChow") == 0 ) return CMsgPlayerFormsClosedChow;
+ if ( strcmp(s,"CMsgWashOut") == 0 ) return CMsgWashOut;
+ if ( strcmp(s,"CMsgPlayerClaimsMahJong") == 0 ) return CMsgPlayerClaimsMahJong;
+ if ( strcmp(s,"CMsgPlayerMahJongs") == 0 ) return CMsgPlayerMahJongs;
+ if ( strcmp(s,"CMsgPlayerPairs") == 0 ) return CMsgPlayerPairs;
+ if ( strcmp(s,"CMsgPlayerFormsClosedPair") == 0 ) return CMsgPlayerFormsClosedPair;
+ if ( strcmp(s,"CMsgPlayerShowsTiles") == 0 ) return CMsgPlayerShowsTiles;
+ if ( strcmp(s,"CMsgPlayerSpecialSet") == 0 ) return CMsgPlayerSpecialSet;
+ if ( strcmp(s,"CMsgPlayerFormsClosedSpecialSet") == 0 ) return CMsgPlayerFormsClosedSpecialSet;
+ if ( strcmp(s,"CMsgPlayerOptionSet") == 0 ) return CMsgPlayerOptionSet;
+ if ( strcmp(s,"CMsgHandScore") == 0 ) return CMsgHandScore;
+ if ( strcmp(s,"CMsgSettlement") == 0 ) return CMsgSettlement;
+ if ( strcmp(s,"CMsgGameOver") == 0 ) return CMsgGameOver;
+ if ( strcmp(s,"CMsgGameOption") == 0 ) return CMsgGameOption;
+ if ( strcmp(s,"CMsgChangeManager") == 0 ) return CMsgChangeManager;
+ if ( strcmp(s,"CMsgMessage") == 0 ) return CMsgMessage;
+ if ( strcmp(s,"CMsgWall") == 0 ) return CMsgWall;
+ if ( strcmp(s,"CMsgComment") == 0 ) return CMsgComment;
+ if ( strcmp(s,"CMsgSwapTile") == 0 ) return CMsgSwapTile;
+ return -1;
+}
+
+
+char *protocol_print_PlayerMsgType(const PlayerMsgType t) {
+ if ( t == PMsgSaveState ) return "PMsgSaveState";
+ if ( t == PMsgLoadState ) return "PMsgLoadState";
+ if ( t == PMsgConnect ) return "PMsgConnect";
+ if ( t == PMsgRequestReconnect ) return "PMsgRequestReconnect";
+ if ( t == PMsgAuthInfo ) return "PMsgAuthInfo";
+ if ( t == PMsgNewAuthInfo ) return "PMsgNewAuthInfo";
+ if ( t == PMsgDisconnect ) return "PMsgDisconnect";
+ if ( t == PMsgDeclareSpecial ) return "PMsgDeclareSpecial";
+ if ( t == PMsgRequestPause ) return "PMsgRequestPause";
+ if ( t == PMsgReady ) return "PMsgReady";
+ if ( t == PMsgDiscard ) return "PMsgDiscard";
+ if ( t == PMsgNoClaim ) return "PMsgNoClaim";
+ if ( t == PMsgPung ) return "PMsgPung";
+ if ( t == PMsgFormClosedPung ) return "PMsgFormClosedPung";
+ if ( t == PMsgKong ) return "PMsgKong";
+ if ( t == PMsgDeclareClosedKong ) return "PMsgDeclareClosedKong";
+ if ( t == PMsgAddToPung ) return "PMsgAddToPung";
+ if ( t == PMsgQueryMahJong ) return "PMsgQueryMahJong";
+ if ( t == PMsgChow ) return "PMsgChow";
+ if ( t == PMsgFormClosedChow ) return "PMsgFormClosedChow";
+ if ( t == PMsgDeclareWashOut ) return "PMsgDeclareWashOut";
+ if ( t == PMsgMahJong ) return "PMsgMahJong";
+ if ( t == PMsgPair ) return "PMsgPair";
+ if ( t == PMsgFormClosedPair ) return "PMsgFormClosedPair";
+ if ( t == PMsgShowTiles ) return "PMsgShowTiles";
+ if ( t == PMsgSpecialSet ) return "PMsgSpecialSet";
+ if ( t == PMsgFormClosedSpecialSet ) return "PMsgFormClosedSpecialSet";
+ if ( t == PMsgSetPlayerOption ) return "PMsgSetPlayerOption";
+ if ( t == PMsgSetGameOption ) return "PMsgSetGameOption";
+ if ( t == PMsgQueryGameOption ) return "PMsgQueryGameOption";
+ if ( t == PMsgListGameOptions ) return "PMsgListGameOptions";
+ if ( t == PMsgChangeManager ) return "PMsgChangeManager";
+ if ( t == PMsgSendMessage ) return "PMsgSendMessage";
+ if ( t == PMsgSwapTile ) return "PMsgSwapTile";
+ return (char *)0;
+}
+
+PlayerMsgType protocol_scan_PlayerMsgType(const char *s) {
+ if ( strcmp(s,"PMsgSaveState") == 0 ) return PMsgSaveState;
+ if ( strcmp(s,"PMsgLoadState") == 0 ) return PMsgLoadState;
+ if ( strcmp(s,"PMsgConnect") == 0 ) return PMsgConnect;
+ if ( strcmp(s,"PMsgRequestReconnect") == 0 ) return PMsgRequestReconnect;
+ if ( strcmp(s,"PMsgAuthInfo") == 0 ) return PMsgAuthInfo;
+ if ( strcmp(s,"PMsgNewAuthInfo") == 0 ) return PMsgNewAuthInfo;
+ if ( strcmp(s,"PMsgDisconnect") == 0 ) return PMsgDisconnect;
+ if ( strcmp(s,"PMsgDeclareSpecial") == 0 ) return PMsgDeclareSpecial;
+ if ( strcmp(s,"PMsgRequestPause") == 0 ) return PMsgRequestPause;
+ if ( strcmp(s,"PMsgReady") == 0 ) return PMsgReady;
+ if ( strcmp(s,"PMsgDiscard") == 0 ) return PMsgDiscard;
+ if ( strcmp(s,"PMsgNoClaim") == 0 ) return PMsgNoClaim;
+ if ( strcmp(s,"PMsgPung") == 0 ) return PMsgPung;
+ if ( strcmp(s,"PMsgFormClosedPung") == 0 ) return PMsgFormClosedPung;
+ if ( strcmp(s,"PMsgKong") == 0 ) return PMsgKong;
+ if ( strcmp(s,"PMsgDeclareClosedKong") == 0 ) return PMsgDeclareClosedKong;
+ if ( strcmp(s,"PMsgAddToPung") == 0 ) return PMsgAddToPung;
+ if ( strcmp(s,"PMsgQueryMahJong") == 0 ) return PMsgQueryMahJong;
+ if ( strcmp(s,"PMsgChow") == 0 ) return PMsgChow;
+ if ( strcmp(s,"PMsgFormClosedChow") == 0 ) return PMsgFormClosedChow;
+ if ( strcmp(s,"PMsgDeclareWashOut") == 0 ) return PMsgDeclareWashOut;
+ if ( strcmp(s,"PMsgMahJong") == 0 ) return PMsgMahJong;
+ if ( strcmp(s,"PMsgPair") == 0 ) return PMsgPair;
+ if ( strcmp(s,"PMsgFormClosedPair") == 0 ) return PMsgFormClosedPair;
+ if ( strcmp(s,"PMsgShowTiles") == 0 ) return PMsgShowTiles;
+ if ( strcmp(s,"PMsgSpecialSet") == 0 ) return PMsgSpecialSet;
+ if ( strcmp(s,"PMsgFormClosedSpecialSet") == 0 ) return PMsgFormClosedSpecialSet;
+ if ( strcmp(s,"PMsgSetPlayerOption") == 0 ) return PMsgSetPlayerOption;
+ if ( strcmp(s,"PMsgSetGameOption") == 0 ) return PMsgSetGameOption;
+ if ( strcmp(s,"PMsgQueryGameOption") == 0 ) return PMsgQueryGameOption;
+ if ( strcmp(s,"PMsgListGameOptions") == 0 ) return PMsgListGameOptions;
+ if ( strcmp(s,"PMsgChangeManager") == 0 ) return PMsgChangeManager;
+ if ( strcmp(s,"PMsgSendMessage") == 0 ) return PMsgSendMessage;
+ if ( strcmp(s,"PMsgSwapTile") == 0 ) return PMsgSwapTile;
+ return -1;
+}
+
+
--- /dev/null
+++ b/protocol-enums.h
@@ -0,0 +1,12 @@
+char *protocol_print_GameOption(const GameOption t);
+GameOption protocol_scan_GameOption(const char *s);
+
+char *protocol_print_GameOptionType(const GameOptionType t);
+GameOptionType protocol_scan_GameOptionType(const char *s);
+
+char *protocol_print_ControllerMsgType(const ControllerMsgType t);
+ControllerMsgType protocol_scan_ControllerMsgType(const char *s);
+
+char *protocol_print_PlayerMsgType(const PlayerMsgType t);
+PlayerMsgType protocol_scan_PlayerMsgType(const char *s);
+
--- /dev/null
+++ b/tiles-enums.c
@@ -0,0 +1,91 @@
+char *tiles_print_TileSuit(const TileSuit t) {
+ if ( t == BambooSuit ) return "BambooSuit";
+ if ( t == CharacterSuit ) return "CharacterSuit";
+ if ( t == CircleSuit ) return "CircleSuit";
+ if ( t == WindSuit ) return "WindSuit";
+ if ( t == DragonSuit ) return "DragonSuit";
+ if ( t == FlowerSuit ) return "FlowerSuit";
+ if ( t == SeasonSuit ) return "SeasonSuit";
+ return (char *)0;
+}
+
+TileSuit tiles_scan_TileSuit(const char *s) {
+ if ( strcmp(s,"BambooSuit") == 0 ) return BambooSuit;
+ if ( strcmp(s,"CharacterSuit") == 0 ) return CharacterSuit;
+ if ( strcmp(s,"CircleSuit") == 0 ) return CircleSuit;
+ if ( strcmp(s,"WindSuit") == 0 ) return WindSuit;
+ if ( strcmp(s,"DragonSuit") == 0 ) return DragonSuit;
+ if ( strcmp(s,"FlowerSuit") == 0 ) return FlowerSuit;
+ if ( strcmp(s,"SeasonSuit") == 0 ) return SeasonSuit;
+ return -1;
+}
+
+
+char *tiles_print_TileWind(const TileWind t) {
+ if ( t == UnknownWind ) return "UnknownWind";
+ if ( t == EastWind ) return "EastWind";
+ if ( t == SouthWind ) return "SouthWind";
+ if ( t == WestWind ) return "WestWind";
+ if ( t == NorthWind ) return "NorthWind";
+ return (char *)0;
+}
+
+TileWind tiles_scan_TileWind(const char *s) {
+ if ( strcmp(s,"UnknownWind") == 0 ) return UnknownWind;
+ if ( strcmp(s,"EastWind") == 0 ) return EastWind;
+ if ( strcmp(s,"SouthWind") == 0 ) return SouthWind;
+ if ( strcmp(s,"WestWind") == 0 ) return WestWind;
+ if ( strcmp(s,"NorthWind") == 0 ) return NorthWind;
+ return -1;
+}
+
+
+char *tiles_print_TileDragon(const TileDragon t) {
+ if ( t == RedDragon ) return "RedDragon";
+ if ( t == WhiteDragon ) return "WhiteDragon";
+ if ( t == GreenDragon ) return "GreenDragon";
+ return (char *)0;
+}
+
+TileDragon tiles_scan_TileDragon(const char *s) {
+ if ( strcmp(s,"RedDragon") == 0 ) return RedDragon;
+ if ( strcmp(s,"WhiteDragon") == 0 ) return WhiteDragon;
+ if ( strcmp(s,"GreenDragon") == 0 ) return GreenDragon;
+ return -1;
+}
+
+
+char *tiles_print_TileFlower(const TileFlower t) {
+ if ( t == Plum ) return "Plum";
+ if ( t == Orchid ) return "Orchid";
+ if ( t == Chrysanthemum ) return "Chrysanthemum";
+ if ( t == Bamboo ) return "Bamboo";
+ return (char *)0;
+}
+
+TileFlower tiles_scan_TileFlower(const char *s) {
+ if ( strcmp(s,"Plum") == 0 ) return Plum;
+ if ( strcmp(s,"Orchid") == 0 ) return Orchid;
+ if ( strcmp(s,"Chrysanthemum") == 0 ) return Chrysanthemum;
+ if ( strcmp(s,"Bamboo") == 0 ) return Bamboo;
+ return -1;
+}
+
+
+char *tiles_print_TileSeason(const TileSeason t) {
+ if ( t == Spring ) return "Spring";
+ if ( t == Summer ) return "Summer";
+ if ( t == Autumn ) return "Autumn";
+ if ( t == Winter ) return "Winter";
+ return (char *)0;
+}
+
+TileSeason tiles_scan_TileSeason(const char *s) {
+ if ( strcmp(s,"Spring") == 0 ) return Spring;
+ if ( strcmp(s,"Summer") == 0 ) return Summer;
+ if ( strcmp(s,"Autumn") == 0 ) return Autumn;
+ if ( strcmp(s,"Winter") == 0 ) return Winter;
+ return -1;
+}
+
+
--- /dev/null
+++ b/tiles-enums.h
@@ -0,0 +1,15 @@
+char *tiles_print_TileSuit(const TileSuit t);
+TileSuit tiles_scan_TileSuit(const char *s);
+
+char *tiles_print_TileWind(const TileWind t);
+TileWind tiles_scan_TileWind(const char *s);
+
+char *tiles_print_TileDragon(const TileDragon t);
+TileDragon tiles_scan_TileDragon(const char *s);
+
+char *tiles_print_TileFlower(const TileFlower t);
+TileFlower tiles_scan_TileFlower(const char *s);
+
+char *tiles_print_TileSeason(const TileSeason t);
+TileSeason tiles_scan_TileSeason(const char *s);
+