From ea1947ffcc606d757357398b24e74a3f4ecefa07 Mon Sep 17 00:00:00 2001 From: neonloop Date: Wed, 20 Oct 2021 14:54:27 +0000 Subject: Initial commit from steward-fu release --- modules/mod_debug/Makefile | 619 +++++++ modules/mod_debug/Makefile.am | 15 + modules/mod_debug/Makefile.in | 619 +++++++ modules/mod_debug/mod_debug.c | 2882 +++++++++++++++++++++++++++++++++ modules/mod_debug/mod_debug_exports.h | 58 + modules/mod_debug/systexts.c | 1128 +++++++++++++ 6 files changed, 5321 insertions(+) create mode 100644 modules/mod_debug/Makefile create mode 100644 modules/mod_debug/Makefile.am create mode 100644 modules/mod_debug/Makefile.in create mode 100644 modules/mod_debug/mod_debug.c create mode 100644 modules/mod_debug/mod_debug_exports.h create mode 100644 modules/mod_debug/systexts.c (limited to 'modules/mod_debug') diff --git a/modules/mod_debug/Makefile b/modules/mod_debug/Makefile new file mode 100644 index 0000000..762a3a8 --- /dev/null +++ b/modules/mod_debug/Makefile @@ -0,0 +1,619 @@ +# Makefile.in generated by automake 1.12.1 from Makefile.am. +# mod_debug/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994-2012 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +#AUTOMAKE_OPTIONS = no-dependencies foreign + + +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/bennu +pkgincludedir = $(includedir)/bennu +pkglibdir = $(libdir)/bennu +pkglibexecdir = $(libexecdir)/bennu +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-pc-none +host_triplet = arm-unknown-linux-gnu +target_triplet = arm-unknown-linux-gnu +subdir = mod_debug +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/depcomp +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libdir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +am__DEPENDENCIES_1 = +libmod_debug_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_libmod_debug_la_OBJECTS = libmod_debug_la-mod_debug.lo \ + libmod_debug_la-systexts.lo +libmod_debug_la_OBJECTS = $(am_libmod_debug_la_OBJECTS) +libmod_debug_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libmod_debug_la_CFLAGS) \ + $(CFLAGS) $(libmod_debug_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I. +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libmod_debug_la_SOURCES) +DIST_SOURCES = $(libmod_debug_la_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/steward/Github/miyoo_src/bennugd/modules/missing --run aclocal-1.12 +AMTAR = $${TAR-tar} +AR = /opt/miyoo/usr/bin/arm-linux-ar +AS = as +AUTOCONF = ${SHELL} /home/steward/Github/miyoo_src/bennugd/modules/missing --run autoconf +AUTOHEADER = ${SHELL} /home/steward/Github/miyoo_src/bennugd/modules/missing --run autoheader +AUTOMAKE = ${SHELL} /home/steward/Github/miyoo_src/bennugd/modules/missing --run automake-1.12 +AWK = mawk +BGD_PATH = /home/steward/Github/miyoo_src/bennugd/modules/../core +CC = /opt/miyoo/usr/bin/arm-linux-gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -DTARGET_MIYOO -mcpu=arm926ej-s -mtune=arm926ej-s -O3 -DARM -D_ARM_ASSEM_ -I/opt/miyoo/arm-miyoo-linux-uclibcgnueabi/sysroot/usr/include/SDL -O2 -finline-functions -fno-strict-aliasing -Wall -DTARGET_LINUX -DUSE_LIBDES -DTARGET_MIYOO -mcpu=arm926ej-s -mtune=arm926ej-s -O3 -DARM -D_ARM_ASSEM_ -I/opt/miyoo/arm-miyoo-linux-uclibcgnueabi/sysroot/usr/include/SDL -I/home/steward/Github/miyoo_src/bennugd/modules/../3rdparty/des-4.04b +COMMON_CFLAGS = -Wall -DTARGET_LINUX -DUSE_LIBDES -DTARGET_MIYOO -mcpu=arm926ej-s -mtune=arm926ej-s -O3 -DARM -D_ARM_ASSEM_ -I/opt/miyoo/arm-miyoo-linux-uclibcgnueabi/sysroot/usr/include/SDL -I/home/steward/Github/miyoo_src/bennugd/modules/../3rdparty/des-4.04b +COMMON_LDFLAGS = -lc -ldl -D_REENTRANT -L/home/steward/Github/miyoo_src/bennugd/modules/../3rdparty/des-4.04b -ldes +CPP = /opt/miyoo/usr/bin/arm-linux-gcc -E +CPPFLAGS = +CYGPATH_W = echo +DEFS = -DPACKAGE_NAME=\"bennu\" -DPACKAGE_TARNAME=\"bennu\" -DPACKAGE_VERSION=\"1.0.0\" -DPACKAGE_STRING=\"bennu\ 1.0.0\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DPACKAGE=\"bennu\" -DVERSION=\"1.0.0\" -DHAVE_LIBM=1 +DEPDIR = .deps +DESLIBS = +DLLTOOL = false +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +LD = /opt/miyoo/usr/bin/arm-linux-ld +LDFLAGS = -D_REENTRANT +LIBOBJS = +LIBS = -lm +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIPO = +LN_S = ln -s +LTLIBOBJS = +MAINT = # +MAKEINFO = ${SHELL} /home/steward/Github/miyoo_src/bennugd/modules/missing --run makeinfo +MANIFEST_TOOL = : +MKDIR_P = /bin/mkdir -p +NM = /opt/miyoo/bin//arm-linux-nm -B +NMEDIT = +OBJDUMP = arm-linux-objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = bennu +PACKAGE_BUGREPORT = +PACKAGE_NAME = bennu +PACKAGE_STRING = bennu 1.0.0 +PACKAGE_TARNAME = bennu +PACKAGE_URL = +PACKAGE_VERSION = 1.0.0 +PATH_SEPARATOR = : +PKG_CONFIG = /usr/bin/pkg-config +PKG_CONFIG_LIBDIR = /opt/miyoo/arm-miyoo-linux-uclibcgnueabi/sysroot/usr/lib/pkgconfig +PKG_CONFIG_PATH = /opt/miyoo/arm-miyoo-linux-uclibcgnueabi/sysroot/usr/lib/pkgconfig +PNGLIBS = +PNG_CFLAGS = -I/usr/include/libpng16 +PNG_LIBS = -lpng16 -lz +RANLIB = /opt/miyoo/usr/bin/arm-linux-ranlib +SDL_CFLAGS = -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT +SDL_LIBS = -lSDL -lpthread +SDL_mixer_CFLAGS = -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT +SDL_mixer_LIBS = -lSDL_mixer -lSDL -lpthread +SED = /bin/sed +SET_MAKE = +SHELL = /bin/bash +STRIP = /opt/miyoo/usr/bin/arm-linux-strip +VERSION = 1.0.0 +WINDRES = +X11LIBS = -lX11 +ZLIBS = +ZLIB_CFLAGS = +ZLIB_LIBS = -lz +abs_builddir = /home/steward/Github/miyoo_src/bennugd/modules/mod_debug +abs_srcdir = /home/steward/Github/miyoo_src/bennugd/modules/mod_debug +abs_top_builddir = /home/steward/Github/miyoo_src/bennugd/modules +abs_top_srcdir = /home/steward/Github/miyoo_src/bennugd/modules +ac_ct_AR = +ac_ct_CC = +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = $${TAR-tar} chof - "$$tardir" +am__untar = $${TAR-tar} xf - +bindir = ${exec_prefix}/bin +build = x86_64-pc-none +build_alias = x86_64 +build_cpu = x86_64 +build_os = none +build_vendor = pc +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = arm-unknown-linux-gnu +host_alias = arm-linux +host_cpu = arm +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /home/steward/Github/miyoo_src/bennugd/modules/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /opt/miyoo/usr +program_transform_name = s&^&arm-linux-& +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target = arm-unknown-linux-gnu +target_alias = arm-linux +target_cpu = arm +target_os = linux-gnu +target_vendor = unknown +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +lib_LTLIBRARIES = libmod_debug.la +libmod_debug_la_SOURCES = mod_debug.c systexts.c +libmod_debug_la_CFLAGS = $(COMMON_CFLAGS) $(SDL_CFLAGS) -I$(BGD_PATH)/include -I$(BGD_PATH)/bgdrtm/include -I. -I../libkey -I../librender/ -I../libgrbase +libmod_debug_la_LDFLAGS = -s -module -no-undefined -avoid-version +libmod_debug_la_LIBADD = $(COMMON_LDFLAGS) -L../libkey/.libs -lkey -L../librender/.libs -lrender -L../libgrbase/.libs -lgrbase $(SDL_LIBS) -L$(BGD_PATH)/bgdrtm/src/.libs -lbgdrtm +CLEANFILES = libmod_debug.la +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu mod_debug/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu mod_debug/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: # $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): # $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } +libmod_debug.la: $(libmod_debug_la_OBJECTS) $(libmod_debug_la_DEPENDENCIES) $(EXTRA_libmod_debug_la_DEPENDENCIES) + $(libmod_debug_la_LINK) -rpath $(libdir) $(libmod_debug_la_OBJECTS) $(libmod_debug_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/libmod_debug_la-mod_debug.Plo +include ./$(DEPDIR)/libmod_debug_la-systexts.Plo + +.c.o: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c $< + +.c.obj: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: + $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +# source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LTCOMPILE) -c -o $@ $< + +libmod_debug_la-mod_debug.lo: mod_debug.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmod_debug_la_CFLAGS) $(CFLAGS) -MT libmod_debug_la-mod_debug.lo -MD -MP -MF $(DEPDIR)/libmod_debug_la-mod_debug.Tpo -c -o libmod_debug_la-mod_debug.lo `test -f 'mod_debug.c' || echo '$(srcdir)/'`mod_debug.c + $(am__mv) $(DEPDIR)/libmod_debug_la-mod_debug.Tpo $(DEPDIR)/libmod_debug_la-mod_debug.Plo +# source='mod_debug.c' object='libmod_debug_la-mod_debug.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmod_debug_la_CFLAGS) $(CFLAGS) -c -o libmod_debug_la-mod_debug.lo `test -f 'mod_debug.c' || echo '$(srcdir)/'`mod_debug.c + +libmod_debug_la-systexts.lo: systexts.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmod_debug_la_CFLAGS) $(CFLAGS) -MT libmod_debug_la-systexts.lo -MD -MP -MF $(DEPDIR)/libmod_debug_la-systexts.Tpo -c -o libmod_debug_la-systexts.lo `test -f 'systexts.c' || echo '$(srcdir)/'`systexts.c + $(am__mv) $(DEPDIR)/libmod_debug_la-systexts.Tpo $(DEPDIR)/libmod_debug_la-systexts.Plo +# source='systexts.c' object='libmod_debug_la-systexts.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmod_debug_la_CFLAGS) $(CFLAGS) -c -o libmod_debug_la-systexts.lo `test -f 'systexts.c' || echo '$(srcdir)/'`systexts.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +cscopelist: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(libdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-libLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool cscopelist ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am \ + install-libLTLIBRARIES install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-libLTLIBRARIES + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/modules/mod_debug/Makefile.am b/modules/mod_debug/Makefile.am new file mode 100644 index 0000000..134118f --- /dev/null +++ b/modules/mod_debug/Makefile.am @@ -0,0 +1,15 @@ +## Process this file with automake to produce Makefile.in + +#AUTOMAKE_OPTIONS = no-dependencies foreign + +lib_LTLIBRARIES = libmod_debug.la + +libmod_debug_la_SOURCES = mod_debug.c systexts.c +libmod_debug_la_CFLAGS = $(COMMON_CFLAGS) $(SDL_CFLAGS) -I$(BGD_PATH)/include -I$(BGD_PATH)/bgdrtm/include -I. -I../libkey -I../librender/ -I../libgrbase +libmod_debug_la_LDFLAGS = -s -module -no-undefined -avoid-version +libmod_debug_la_LIBADD = $(COMMON_LDFLAGS) -L../libkey/.libs -lkey -L../librender/.libs -lrender -L../libgrbase/.libs -lgrbase $(SDL_LIBS) -L$(BGD_PATH)/bgdrtm/src/.libs -lbgdrtm + +## Make sure these will be cleaned even when they're not built by +## default. +CLEANFILES = libmod_debug.la + diff --git a/modules/mod_debug/Makefile.in b/modules/mod_debug/Makefile.in new file mode 100644 index 0000000..2eb42b4 --- /dev/null +++ b/modules/mod_debug/Makefile.in @@ -0,0 +1,619 @@ +# Makefile.in generated by automake 1.12.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2012 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +#AUTOMAKE_OPTIONS = no-dependencies foreign + +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = mod_debug +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/depcomp +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libdir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +am__DEPENDENCIES_1 = +libmod_debug_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_libmod_debug_la_OBJECTS = libmod_debug_la-mod_debug.lo \ + libmod_debug_la-systexts.lo +libmod_debug_la_OBJECTS = $(am_libmod_debug_la_OBJECTS) +libmod_debug_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libmod_debug_la_CFLAGS) \ + $(CFLAGS) $(libmod_debug_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libmod_debug_la_SOURCES) +DIST_SOURCES = $(libmod_debug_la_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BGD_PATH = @BGD_PATH@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +COMMON_CFLAGS = @COMMON_CFLAGS@ +COMMON_LDFLAGS = @COMMON_LDFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DESLIBS = @DESLIBS@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PNGLIBS = @PNGLIBS@ +PNG_CFLAGS = @PNG_CFLAGS@ +PNG_LIBS = @PNG_LIBS@ +RANLIB = @RANLIB@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_LIBS = @SDL_LIBS@ +SDL_mixer_CFLAGS = @SDL_mixer_CFLAGS@ +SDL_mixer_LIBS = @SDL_mixer_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WINDRES = @WINDRES@ +X11LIBS = @X11LIBS@ +ZLIBS = @ZLIBS@ +ZLIB_CFLAGS = @ZLIB_CFLAGS@ +ZLIB_LIBS = @ZLIB_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +lib_LTLIBRARIES = libmod_debug.la +libmod_debug_la_SOURCES = mod_debug.c systexts.c +libmod_debug_la_CFLAGS = $(COMMON_CFLAGS) $(SDL_CFLAGS) -I$(BGD_PATH)/include -I$(BGD_PATH)/bgdrtm/include -I. -I../libkey -I../librender/ -I../libgrbase +libmod_debug_la_LDFLAGS = -s -module -no-undefined -avoid-version +libmod_debug_la_LIBADD = $(COMMON_LDFLAGS) -L../libkey/.libs -lkey -L../librender/.libs -lrender -L../libgrbase/.libs -lgrbase $(SDL_LIBS) -L$(BGD_PATH)/bgdrtm/src/.libs -lbgdrtm +CLEANFILES = libmod_debug.la +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu mod_debug/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu mod_debug/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } +libmod_debug.la: $(libmod_debug_la_OBJECTS) $(libmod_debug_la_DEPENDENCIES) $(EXTRA_libmod_debug_la_DEPENDENCIES) + $(libmod_debug_la_LINK) -rpath $(libdir) $(libmod_debug_la_OBJECTS) $(libmod_debug_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmod_debug_la-mod_debug.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmod_debug_la-systexts.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +libmod_debug_la-mod_debug.lo: mod_debug.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmod_debug_la_CFLAGS) $(CFLAGS) -MT libmod_debug_la-mod_debug.lo -MD -MP -MF $(DEPDIR)/libmod_debug_la-mod_debug.Tpo -c -o libmod_debug_la-mod_debug.lo `test -f 'mod_debug.c' || echo '$(srcdir)/'`mod_debug.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libmod_debug_la-mod_debug.Tpo $(DEPDIR)/libmod_debug_la-mod_debug.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mod_debug.c' object='libmod_debug_la-mod_debug.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmod_debug_la_CFLAGS) $(CFLAGS) -c -o libmod_debug_la-mod_debug.lo `test -f 'mod_debug.c' || echo '$(srcdir)/'`mod_debug.c + +libmod_debug_la-systexts.lo: systexts.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmod_debug_la_CFLAGS) $(CFLAGS) -MT libmod_debug_la-systexts.lo -MD -MP -MF $(DEPDIR)/libmod_debug_la-systexts.Tpo -c -o libmod_debug_la-systexts.lo `test -f 'systexts.c' || echo '$(srcdir)/'`systexts.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libmod_debug_la-systexts.Tpo $(DEPDIR)/libmod_debug_la-systexts.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='systexts.c' object='libmod_debug_la-systexts.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmod_debug_la_CFLAGS) $(CFLAGS) -c -o libmod_debug_la-systexts.lo `test -f 'systexts.c' || echo '$(srcdir)/'`systexts.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +cscopelist: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(libdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-libLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool cscopelist ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am \ + install-libLTLIBRARIES install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-libLTLIBRARIES + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/modules/mod_debug/mod_debug.c b/modules/mod_debug/mod_debug.c new file mode 100644 index 0000000..4ea03d6 --- /dev/null +++ b/modules/mod_debug/mod_debug.c @@ -0,0 +1,2882 @@ +/* + * Copyright © 2006-2016 SplinterGU (Fenix/Bennugd) + * Copyright © 2002-2006 Fenix Team (Fenix) + * Copyright © 1999-2002 José Luis Cebrián Pagüe (Fenix) + * + * This file is part of Bennu - Game Development + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + * + */ + +/* --------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include + +#include + +#include "bgdcore.h" +#include "bgdrtm.h" +#include "bgddl.h" +#include "dlvaracc.h" + +#include "dcb.h" +#include "instance.h" + +#include "files.h" + +#include "xstrings.h" +#include "libkey.h" +#include "libgrbase.h" +#include "librender.h" + +/* --------------------------------------------------------------------------- */ + +extern void systext_color( int cfg, int cbg ); +extern void systext_puts( GRAPH * map, int x, int y, char * str, int len ); + +/* --------------------------------------------------------------------------- */ + +#ifndef _vsnprintf +#define _vsnprintf vsnprintf +#endif + +#ifndef _snprintf +#define _snprintf snprintf +#endif + +/* --------------------------------------------------------------------------- */ + +enum { + PROCESS_ID = 0, + FATHER, + BIGBRO, + SON, + STATUS +}; + +enum { + SHIFTSTATUS = 0 +}; + +/* --------------------------------------------------------------------------- */ + +DLVARFIXUP __bgdexport( mod_debug, locals_fixup )[] = +{ + { "id" , NULL, -1, -1 }, + { "father" , NULL, -1, -1 }, + { "bigbro" , NULL, -1, -1 }, + { "son" , NULL, -1, -1 }, + { "reserved.status" , NULL, -1, -1 }, + + { NULL , NULL, -1, -1 } +}; + +/* --------------------------------------------------------------------------- */ + +DLVARFIXUP __bgdexport( mod_debug, globals_fixup )[] = +{ + { "shift_status" , NULL, -1, -1 }, + + { NULL , NULL, -1, -1 } +}; + +/* --------------------------------------------------------------------------- */ + +#define MAXTEXT 5000 + +#define CHARWIDTH 6 +#define CHARHEIGHT 8 + +#define CONSOLE_HISTORY 512 +#define CONSOLE_LINES 25 +#define CONSOLE_COLUMNS 80 +#define COMMAND_HISTORY 128 + +#define MAX_EXPRESSIONS 128 + +/* --------------------------------------------------------------------------- */ + +#define HELPTXT \ + "¬04Process Info¬07\n" \ + "¬05INSTANCES ¬07 List all running processes\n" \ + "¬05GLOBALS ¬07 Show global vars with values\n" \ + "¬05LOCALS proc ¬07 Show a process's local vars\n" \ + "¬05PRIVATES proc ¬07 Show a process's private vars\n" \ + "¬05PUBLICS proc ¬07 Show a process's public vars\n" \ + "\n" \ + "¬04Execution Commands¬07\n" \ + "¬05GO ¬07 Continue the execution\n" \ + "¬05TRACE ¬07 Execute one instruction and Debug\n" \ + "¬05NEXTFRAME ¬07 Continue to next frame\n" \ + "¬05NEXTPROC ¬07 Continue to next process\n" \ + "\n" \ + "¬04Breakpoints¬07\n" \ + "¬05BREAK ¬07 List breakpoints\n" \ + "¬05BREAK proc ¬07 Set a breakpoint on process\n" \ + "¬05BREAKALL ¬07 Set breakpoints on all processes\n" \ + "¬05BREAKALLTYPES ¬07 Set breakpoints on all processes types\n" \ + "¬05DELETE proc ¬07 Delete a breakpoint\n" \ + "¬05DELETEALL ¬07 Delete all breakpoints on all processess\n" \ + "¬05DELETEALLTYPES ¬07 Delete all breakpoints on all processess types\n" \ + "\n" \ + "¬04Process Interaction¬07\n" \ + "¬05RUN proc [args] ¬07 Run a process\n" \ + "¬05KILL proc ¬07 Kill a process\n" \ + "¬05WAKEUP proc ¬07 Wakeup a process\n" \ + "¬05SLEEP proc ¬07 Sleep a process\n" \ + "¬05FREEZE proc ¬07 Freeze a process\n" \ + "¬05KILLALL proc ¬07 Kill all process with criteria\n" \ + "¬05WAKEUPALL proc ¬07 Wakeup all process with criteria\n" \ + "¬05SLEEPALL proc ¬07 Sleep all process with criteria\n" \ + "¬05FREEZEALL proc ¬07 Freeze all process with criteria\n" \ + "\n" \ + "¬04Misc¬07\n" \ + "¬05SHOW expression ¬07 Evaluate and show some expression\n" \ + "¬05SHOW ¬07 List all expressions to show\n" \ + "¬05SHOWDEL ExpID ¬07 Delete an expression (by ID, use SHOW)\n" \ + "¬05SHOWDELALL ¬07 Delete all expression\n" \ + "¬05STRINGS ¬07 Show all strings in memory\n" \ + "¬05VARS ¬07 Show internals vars\n" \ + "¬05QUIT ¬07 Kill the program and exit\n" \ + "\n" \ + "¬04Keys¬07\n" \ + "¬05ESC ¬07 Cancel command\n" \ + "¬05UP/DOWN ¬07 Command history navigation\n" \ + "¬05PGUP/PGDN ¬07 Page Up/Page Down\n" \ + "¬05CTRL+CURSORS ¬07 Console scroll\n" \ + "¬05ALT+CURSORS ¬07 Console window size\n" \ + "¬05SHIFT+CURSORS ¬07 List window scroll\n" \ + "\n" \ + "You can evaluate free expressions in the console, and you can see/change\n" \ + "local, public and private vars using the '.' operator\n" \ + "(pe: 65535.X, MAIN.X, etc.)\n\n" + +/* --------------------------------------------------------------------------- */ + +#define HOTKEYHELP_SIZE 50 + +#define HOTKEYHELP1 "¬01F1:¬00?\x03¬01F2:¬00Procs\x03¬01F5:¬00Go\x03¬01F8:¬00Trace\x03¬01F10:¬00NFrame\x03¬01F11:¬00NProc" +#define HOTKEYHELP2 "¬01F1:¬00?\x03¬01F2:¬00Brief\x03¬01F6:¬00Procs\x03¬01F9:¬00Break" +#define HOTKEYHELP3 "¬01F1:¬00?\x03¬01F2:¬00Brief\x03¬01F3:¬00Loc\x03¬01F4:¬00Pri\x03¬01F5:¬00Pub\x03¬01F6:¬00Types\x03¬01F9:¬00Brk" + +/* --------------------------------------------------------------------------- */ + +#define N_CONSOLE_VARS (sizeof(console_vars)/sizeof(console_vars[0])) + +#define CON_DWORD 0x0001 +#define CON_DWORD_HEX 0x8001 + +/* --------------------------------------------------------------------------- */ + +/* Tipos de token */ +#define IDENTIFIER 1 +#define STRING 2 +#define NUMBER 3 +#define OPERATOR 4 +#define NOTOKEN 5 + +/* --------------------------------------------------------------------------- */ + +static struct +{ + int type ; + DCB_VAR var ; + double value ; + void * data ; + char name[256] ; +} result, lvalue ; + +static struct +{ + enum { T_ERROR, T_VARIABLE, T_NUMBER, T_CONSTANT, T_STRING } type ; + char name[128] ; + double code ; +} token ; + +static const char * token_ptr ; + +/* --------------------------------------------------------------------------- */ + +/* Console contents */ +static int console_lines = CONSOLE_LINES ; +static int console_columns = CONSOLE_COLUMNS ; + +static char * console[CONSOLE_HISTORY] ; +static int console_initialized = 0 ; +static int console_head = 0 ; +static int console_tail = 0 ; + +static char * command[COMMAND_HISTORY] ; +static int command_initialized = 0 ; +static int command_head = 0 ; +static int command_tail = 0 ; +static int command_count = 0 ; + +static char * show_expression[MAX_EXPRESSIONS] = { NULL }; +static int show_expression_count = 0; +static int console_showcolor = 0xffffff; + +static int console_y = 0 ; + +/* --------------------------------------------------------------------------- */ + +static int debug_on_frame = 0; +static int break_on_next_proc = 0; + +/* --------------------------------------------------------------------------- */ + +static struct +{ + char * name ; + void * value ; + int type ; +} +console_vars[] = +{ + { "SHOW_COLOR", &console_showcolor, CON_DWORD_HEX }, + { "FILES", &opened_files, CON_DWORD }, + { "DEBUG_LEVEL", &debug, CON_DWORD }, +} ; + +/* --------------------------------------------------------------------------- */ + +static int console_showing = 0 ; +static int console_scroll_pos = 0 ; +static int console_scroll_lateral_pos = 0 ; +static char console_input[128] ; + +/* --------------------------------------------------------------------------- */ + +static void eval_immediate(); +static void eval_value(); +static void eval_factor(); +static void eval_subexpression(); +static char * eval_expression( const char * here, int interactive ); + +static char * describe_type( DCB_TYPEDEF type, int from ); +static char * show_value( DCB_TYPEDEF type, void * data ); +static void show_struct( int num, char * title, int indent, void * data ); +static void show_var( DCB_VAR var, char * name, void * data, char * title, int indent ); + +static int type_size( DCB_TYPEDEF orig ); +static DCB_TYPEDEF reduce_type( DCB_TYPEDEF orig ); +static void var2const(); + +static void console_do( const char * command ); + +/* --------------------------------------------------------------------------- */ + +static void console_scroll( int direction ) +{ + console_scroll_pos += direction ; + if ( direction < 0 ) + { + if ( console_scroll_pos < 0 ) console_scroll_pos = 0 ; + } + else + { + if ( console_scroll_pos > CONSOLE_HISTORY ) console_scroll_pos = CONSOLE_HISTORY ; + } +} + +/* --------------------------------------------------------------------------- */ + +static void console_putline( char * text ) +{ + if ( !console_initialized ) + { + memset( console, 0, sizeof( console ) ) ; + console_initialized = 1 ; + } + + if ( console[console_tail] ) free( console[console_tail] ) ; + console[console_tail] = strdup( text ) ; + + console_tail++ ; + if ( console_tail == CONSOLE_HISTORY ) console_tail = 0 ; + if ( console_tail == console_head ) + { + console_head++ ; + if ( console_head == CONSOLE_HISTORY ) console_head = 0 ; + } +} + +/* --------------------------------------------------------------------------- */ + +static void console_printf( const char *fmt, ... ) +{ + char text[MAXTEXT], * ptr, * iptr ; + + va_list ap; + va_start( ap, fmt ); + _vsnprintf( text, sizeof( text ), fmt, ap ); + va_end( ap ); + text[sizeof( text )-1] = 0; + + if ( *text == '[' ) + { + memmove( text + 3, text, strlen( text ) + 1 ) ; + memmove( text, "¬08", 3 ) ; + ptr = strchr( text, ']' ) ; + if ( ptr ) + { + ptr++ ; + memmove( ptr + 3, ptr, strlen( ptr ) + 1 ) ; + memmove( ptr, "¬07", 3 ) ; + } + } + + iptr = text ; + ptr = text ; + + while ( *ptr ) + { + if ( *ptr == '\n' ) + { + *ptr = 0 ; + console_putline( iptr ) ; + iptr = ptr + 1 ; + } + if ( *ptr == '¬' ) + { + ptr++ ; + if ( isdigit( *ptr ) ) ptr++ ; + if ( isdigit( *ptr ) ) ptr++ ; + continue ; + } + ptr++ ; + } + + if ( ptr > iptr ) console_putline( iptr ) ; +} + +/* --------------------------------------------------------------------------- */ + +static void console_putcommand( const char * commandline ) +{ + if ( !command_initialized ) + { + memset( command, 0, sizeof( command ) ); + command_initialized = 1; + } + + if ( command[command_tail] ) free( command[command_tail] ); + command[command_tail++] = strdup( commandline ); + if ( command_tail == COMMAND_HISTORY ) command_tail = 0; + if ( command_tail == command_head ) + { + if ( ++command_head == COMMAND_HISTORY ) command_head = 0; + } + else + command_count++; +} + +/* --------------------------------------------------------------------------- */ + +static const char * console_getcommand( int offset ) +{ + if ( offset >= 0 || offset < -command_count ) return NULL; + + offset = command_tail + offset; + while ( offset < 0 ) offset = COMMAND_HISTORY + offset; + return command[offset]; +} + +/* --------------------------------------------------------------------------- */ + +static void console_getkey( int key, int sym ) +{ + static int history_offset = 0; + char buffer[2] ; + const char * command; + + if ( !key ) + { + if ( sym == SDLK_UP ) + { + command = console_getcommand( --history_offset ); + if ( command == NULL ) + history_offset++; + else + strncpy( console_input, command, 127 ); + } + + if ( sym == SDLK_DOWN ) + { + if ( history_offset == -1 ) + { + *console_input = 0; + history_offset++; + } + else + { + command = console_getcommand( ++history_offset ); + if ( command == NULL ) + history_offset--; + else + strncpy( console_input, command, 127 ); + } + } + } + + if ( key == SDLK_BACKSPACE && *console_input ) console_input[strlen( console_input )-1] = 0 ; + if ( key == SDLK_RCTRL ) *console_input = 0 ; + if ( key == SDLK_RETURN ) + { + + console_scroll_pos = 0 ; + console_printf( "¬07> %s", console_input ) ; + if ( * console_input ) + { + console_putcommand( console_input ); + console_do( console_input ) ; + *console_input = 0 ; + history_offset = 0; + } + } + + if ( key >= SDLK_SPACE && key <= SDLK_WORLD_95 ) + { + buffer[0] = key ; + buffer[1] = 0 ; + strcat( console_input, buffer ) ; + } +} + +/* --------------------------------------------------------------------------- */ + +static void console_lateral_scroll( int direction ) +{ + if ( direction > 0 ) + { + console_scroll_lateral_pos-- ; + if ( console_scroll_lateral_pos < 0 ) console_scroll_lateral_pos = 0 ; + } + else + { + console_scroll_lateral_pos++ ; + if ( console_scroll_lateral_pos > MAXTEXT ) console_scroll_lateral_pos = MAXTEXT ; + } +} + +/* --------------------------------------------------------------------------- */ + +static char * describe_type( DCB_TYPEDEF type, int from ) +{ + static char buffer[512] ; + int i ; + + if ( !from ) buffer[0] = 0 ; + + switch ( type.BaseType[from] ) + { + case TYPE_ARRAY: + for ( i = from ; type.BaseType[i] == TYPE_ARRAY; i++ ) ; + describe_type( type, i ) ; + for ( i = from ; type.BaseType[i] == TYPE_ARRAY; i++ ) + _snprintf( buffer + strlen( buffer ), 512 - strlen( buffer ), "[%d]", type.Count[i] - 1 ) ; + break ; + + case TYPE_STRUCT: + strcat( buffer, "STRUCT" ) ; + break ; + + case TYPE_DWORD: + strcat( buffer, "DWORD" ) ; + break ; + + case TYPE_INT: + strcat( buffer, "INT" ) ; + break ; + + case TYPE_SHORT: + strcat( buffer, "SHORT" ) ; + break ; + + case TYPE_WORD: + strcat( buffer, "WORD" ) ; + break ; + + case TYPE_BYTE: + strcat( buffer, "BYTE" ) ; + break ; + + case TYPE_SBYTE: + strcat( buffer, "SIGNED BYTE" ) ; + break ; + + case TYPE_CHAR: + strcat( buffer, "CHAR" ) ; + break ; + + case TYPE_STRING: + strcat( buffer, "STRING" ) ; + break ; + + case TYPE_FLOAT: + strcat( buffer, "FLOAT" ) ; + break ; + + case TYPE_POINTER: + describe_type( type, from + 1 ) ; + strcat( buffer, " POINTER" ) ; + break ; + } + + return buffer ; +} + +/* --------------------------------------------------------------------------- */ + +static char * show_value( DCB_TYPEDEF type, void * data ) +{ + static char buffer[512] ; + char * newbuffer ; + int subsize; + unsigned int n ; + unsigned int count ; + + switch ( type.BaseType[0] ) + { + case TYPE_ARRAY: + count = type.Count[0]; + + type = reduce_type( type ) ; + subsize = type_size( type ) ; + if ( type.BaseType[0] == TYPE_STRUCT ) return "" ; + newbuffer = ( char * ) malloc( 512 ) ; + strcpy( newbuffer, "= (" ) ; + for ( n = 0 ; n < count ; n++ ) + { + if ( n ) strcat( newbuffer, ", " ) ; + show_value( type, data ) ; + if ( strlen( newbuffer ) + strlen( buffer ) > 30 ) + { + strcat( newbuffer, "..." ) ; + break ; + } + strcat( newbuffer, buffer + 2 ) ; + data = ( uint8_t * )data + subsize ; + } + strcat( newbuffer, ")" ) ; + strcpy( buffer, newbuffer ) ; + free( newbuffer ) ; + return buffer ; + + case TYPE_STRUCT: + return "" ; + + case TYPE_STRING: + _snprintf( buffer, 512, "= \"%s\"", string_get( *( uint32_t * )data ) ) ; + return buffer ; + + case TYPE_BYTE: + _snprintf( buffer, 512, "= %d", *( uint8_t * )data ) ; + return buffer ; + + case TYPE_SBYTE: + _snprintf( buffer, 512, "= %d", *( int8_t * )data ) ; + return buffer ; + + case TYPE_CHAR: + if ( *( uint8_t * )data >= 32 ) + _snprintf( buffer, 512, "= '%c'", *( uint8_t * )data ) ; + else + _snprintf( buffer, 512, "= '\\x%02X'", *( uint8_t * )data ) ; + return buffer ; + + case TYPE_FLOAT: + _snprintf( buffer, 512, "= %g", *( float * )data ) ; + return buffer ; + + case TYPE_WORD: + _snprintf( buffer, 512, "= %d", *( uint16_t * )data ) ; + return buffer ; + + case TYPE_DWORD: + _snprintf( buffer, 512, "= %ud", *( uint32_t * )data ) ; + return buffer ; + + case TYPE_SHORT: + _snprintf( buffer, 512, "= %d", *( int16_t * )data ) ; + return buffer ; + + case TYPE_INT: + _snprintf( buffer, 512, "= %d", *( int * )data ) ; + return buffer ; + + case TYPE_POINTER: + _snprintf( buffer, 512, "= 0x%08X", *( uint32_t * )data ) ; + return buffer ; + + default: + return "?" ; + } +} + +/* --------------------------------------------------------------------------- */ + +static void show_struct( int num, char * title, int indent, void * data ) +{ + int n, count ; + DCB_VAR * vars ; + + vars = dcb.varspace_vars[num] ; + count = dcb.varspace[num].NVars ; + + for ( n = 0 ; n < count ; n++ ) + { + show_var( vars[n], 0, data ? ( uint8_t * )data + vars[n].Offset : 0, title, indent ) ; + } +} + +/* --------------------------------------------------------------------------- */ + +static void show_var( DCB_VAR var, char * name, void * data, char * title, int indent ) +{ + char spaces[indent+1] ; + + memset( spaces, ' ', indent ) ; + spaces[indent] = 0 ; + + if ( !name ) + { + unsigned int code ; + + name = "?" ; + for ( code = 0 ; code < dcb.data.NID ; code++ ) + { + if ( dcb.id[code].Code == var.ID ) + { + name = ( char * ) dcb.id[code].Name ; + break ; + } + } + } + + if ( data ) + console_printf( "%s%s %s %s %s\n", title, spaces, describe_type( var.Type, 0 ), name, show_value( var.Type, data ) ) ; + else + console_printf( "%s%s %s %s\n", title, spaces, describe_type( var.Type, 0 ), name ) ; + + if ( var.Type.BaseType[0] == TYPE_STRUCT ) + { + show_struct( var.Type.Members, title, indent + 3, data ) ; + console_printf( "%s%s END", title, spaces ) ; + } +} + +/* --------------------------------------------------------------------------- */ + +/* Very simple tokenizer */ + +static void get_token() +{ + char * ptr ; + unsigned int n ; + + while ( isspace( *token_ptr ) ) token_ptr++ ; + + if ( !*token_ptr ) + { + token.type = NOTOKEN ; + return ; + } + + /* Numbers */ + + if ( ISNUM( *token_ptr ) ) + { + const char * ptr; + double num = 0, dec; + int base = 10; + + /* Hex/Bin/Octal numbers with the h/b/o sufix */ + ptr = token_ptr; + while ( ISNUM( *ptr ) || ( *ptr >= 'a' && *ptr <= 'f' ) || ( *ptr >= 'A' && *ptr <= 'F' ) ) ptr++; + + if ( *ptr != 'h' && *ptr != 'H' && *ptr != 'o' && *ptr != 'O' && ( ptr[-1] == 'b' || ptr[-1] == 'B' ) ) ptr--; + + if ( *ptr == 'b' || *ptr == 'B' ) base = 2; + if ( *ptr == 'h' || *ptr == 'H' ) base = 16; + if ( *ptr == 'o' || *ptr == 'O' ) base = 8; + + token.code = 0 ; /* for ints values */ + + /* Calculate the number value */ + + while ( ISNUM( *token_ptr ) || ( base > 10 && ISALNUM( *token_ptr ) ) ) + { + if ( base == 2 && *token_ptr != '0' && *token_ptr != '1' ) break; + if ( base == 8 && ( *token_ptr < '0' || *token_ptr > '7' ) ) break; + if ( base == 10 && !ISNUM( *token_ptr ) ) break; + if ( base == 16 && !ISNUM( *token_ptr ) && ( TOUPPER( *token_ptr ) < 'A' || TOUPPER( *token_ptr ) > 'F' ) ) break; + + if ( ISNUM( *token_ptr ) ) + { + num = num * base + ( *token_ptr - '0' ); + token.code = token.code * base + ( *token_ptr - '0' ); + token_ptr++; + } + if ( *token_ptr >= 'a' && *token_ptr <= 'f' && base > 10 ) + { + num = num * base + ( *token_ptr - 'a' + 10 ); + token.code = token.code * base + ( *token_ptr - 'a' + 10 ); + token_ptr++; + } + if ( *token_ptr >= 'A' && *token_ptr <= 'F' && base > 10 ) + { + num = num * base + ( *token_ptr - 'A' + 10 ); + token.code = token.code * base + ( *token_ptr - 'A' + 10 ); + token_ptr++; + } + } + token.type = NUMBER; + token.code = ( float )num; + + /* We have the integer part now - convert to int/float */ + + if ( *token_ptr == '.' && base == 10 ) + { + token_ptr++; + if ( !ISNUM( *token_ptr ) ) + token_ptr--; + else + { + dec = 1.0 / ( double )base; + while ( ISNUM( *token_ptr ) || ( base > 100 && ISALNUM( *token_ptr ) ) ) + { + if ( ISNUM( *token_ptr ) ) num = num + dec * ( *token_ptr++ - '0' ); + if ( *token_ptr >= 'a' && *token_ptr <= 'f' && base > 10 ) num = num + dec * ( *token_ptr++ - 'a' + 10 ); + if ( *token_ptr >= 'A' && *token_ptr <= 'F' && base > 10 ) num = num + dec * ( *token_ptr++ - 'A' + 10 ); + dec /= ( double )base; + } + token.type = NUMBER; + token.code = ( float )num; + } + } + + /* Skip the base sufix */ + + if ( base == 16 && ( *token_ptr == 'h' || *token_ptr == 'H' ) ) token_ptr++; + if ( base == 8 && ( *token_ptr == 'o' || *token_ptr == 'O' ) ) token_ptr++; + if ( base == 2 && ( *token_ptr == 'b' || *token_ptr == 'B' ) ) token_ptr++; + + _snprintf( token.name, sizeof( token.name ), "%g", token.code ) ; + return ; + } + + if ( *token_ptr == '"' || *token_ptr == '\'' ) /* Cadena */ + { + char c = *token_ptr++ ; + token.type = STRING ; + ptr = token.name; + while ( *token_ptr && *token_ptr != c ) *ptr++ = *token_ptr++ ; + if ( *token_ptr == c ) token_ptr++ ; + *ptr = 0 ; + return ; + } + + ptr = token.name ; + *ptr++ = TOUPPER( *token_ptr ) ; + if ( ISWORDCHAR( *token_ptr++ ) ) + { + while ( ISWORDCHAR( *token_ptr ) ) + *ptr++ = TOUPPER( *token_ptr++ ) ; + } + *ptr = 0 ; + + for ( n = 0 ; n < dcb.data.NID ; n++ ) + { + if ( strcmp( ( char * )dcb.id[n].Name, token.name ) == 0 ) + { + token.type = IDENTIFIER ; + token.code = dcb.id[n].Code ; +/* strcpy( token.name, (char *)dcb.id[n].Name ) ; */ + return ; + } + } + + token.type = OPERATOR ; +} + +/* --------------------------------------------------------------------------- */ + +static DCB_TYPEDEF reduce_type( DCB_TYPEDEF orig ) +{ + int n ; + for ( n = 0 ; n < MAX_TYPECHUNKS - 1 ; n++ ) + { + orig.BaseType[n] = orig.BaseType[n+1] ; + orig.Count[n] = orig.Count[n+1] ; + } + return orig ; +} + +/* --------------------------------------------------------------------------- */ + +static void var2const() +{ + while ( result.type == T_VARIABLE && result.var.Type.BaseType[0] == TYPE_ARRAY ) + result.var.Type = reduce_type( result.var.Type ) ; + + if ( result.type == T_VARIABLE && result.var.Type.BaseType[0] == TYPE_STRING ) + { + result.type = T_STRING ; + strncpy( result.name, string_get( *( int * )( result.data ) ), 127 ) ; + result.name[127] = 0 ; + } + + if ( result.type == T_VARIABLE && result.var.Type.BaseType[0] == TYPE_FLOAT ) + { + result.type = T_CONSTANT ; + result.value = *( float * )( result.data ) ; + } + + if ( result.type == T_VARIABLE && ( result.var.Type.BaseType[0] == TYPE_DWORD || result.var.Type.BaseType[0] == TYPE_INT ) ) + { + result.type = T_CONSTANT ; + result.value = *( int * )( result.data ) ; + } + + if ( result.type == T_VARIABLE && ( result.var.Type.BaseType[0] == TYPE_WORD || result.var.Type.BaseType[0] == TYPE_SHORT ) ) + { + result.type = T_CONSTANT ; + result.value = *( int16_t * )( result.data ) ; + } + + if ( result.type == T_VARIABLE && ( result.var.Type.BaseType[0] == TYPE_BYTE || result.var.Type.BaseType[0] == TYPE_SBYTE ) ) + { + result.type = T_CONSTANT ; + result.value = *( int8_t * )( result.data ) ; + } + + if ( result.type == T_VARIABLE && result.var.Type.BaseType[0] == TYPE_CHAR ) + { + result.type = T_STRING ; + if ( *( uint8_t * )result.data >= 32 ) + _snprintf( result.name, sizeof( result.name ), "%c", *( uint8_t * )result.data ) ; + else + _snprintf( result.name, sizeof( result.name ), "\\x%02X", *( uint8_t * )result.data ) ; + } +} + +/* --------------------------------------------------------------------------- */ + +static int type_size( DCB_TYPEDEF orig ) +{ + unsigned int n, total ; + + switch ( orig.BaseType[0] ) + { + case TYPE_ARRAY: + return orig.Count[0] * type_size( reduce_type( orig ) ) ; + + case TYPE_POINTER: + case TYPE_STRING: + case TYPE_DWORD: + case TYPE_FLOAT: + case TYPE_INT: + return 4 ; + + case TYPE_WORD: + case TYPE_SHORT: + return 2 ; + + case TYPE_BYTE: + case TYPE_SBYTE: + case TYPE_CHAR: + return 1 ; + + case TYPE_STRUCT: + total = 0 ; + for ( n = 0 ; n < dcb.varspace[orig.Members].NVars ; n++ ) + total += type_size( dcb.varspace_vars[orig.Members][n].Type ) ; + return total ; + + default: + return 0 ; + } +} + +/* --------------------------------------------------------------------------- */ + +static void eval_local( DCB_PROC * proc, INSTANCE * i ) +{ + unsigned int n ; + + for ( n = 0 ; n < dcb.data.NLocVars ; n++ ) + { + if ( dcb.locvar[n].ID == token.code ) + { + strcpy( result.name, token.name ) ; + result.type = T_VARIABLE ; + result.var = dcb.locvar[n] ; + result.data = ( uint8_t * )i->locdata + dcb.locvar[n].Offset ; + get_token() ; + return ; + } + } + + for ( n = 0 ; n < proc->data.NPriVars ; n++ ) + { + if ( proc->privar[n].ID == token.code ) + { + strcpy( result.name, token.name ) ; + result.type = T_VARIABLE ; + result.var = proc->privar[n] ; + result.data = ( uint8_t * )i->pridata + proc->privar[n].Offset ; + get_token() ; + return ; + } + } + + for ( n = 0 ; n < proc->data.NPubVars ; n++ ) + { + if ( proc->pubvar[n].ID == token.code ) + { + strcpy( result.name, token.name ) ; + result.type = T_VARIABLE ; + result.var = proc->pubvar[n] ; + result.data = ( uint8_t * )i->pubdata + proc->pubvar[n].Offset ; + get_token() ; + return ; + } + } + + console_printf( "¬02Local or private or public variable not found¬07" ) ; + result.type = T_ERROR ; +} + +/* --------------------------------------------------------------------------- */ + +static void eval_immediate() +{ + unsigned int n ; + + if ( token.type == NUMBER ) + { + result.type = T_CONSTANT ; + result.value = token.code ; + get_token() ; + return ; + } + + if ( token.type == STRING ) + { + result.type = T_STRING ; + _snprintf( result.name, sizeof( result.name ), "%s", token.name ) ; + get_token() ; + return ; + } + + if ( token.type != IDENTIFIER ) + { + console_printf( "¬02Not a valid expression¬07" ) ; + result.type = T_ERROR ; + return ; + } + + if ( token.name[0] == '(' ) + { + get_token() ; + eval_subexpression() ; + if ( token.name[0] != ')' ) + { + console_printf( "¬02Unbalanced parens¬07" ) ; + result.type = T_ERROR ; + return ; + } + get_token() ; + return ; + } + + if ( token.name[0] == '-' ) + { + get_token() ; + eval_immediate() ; + var2const() ; + if ( result.type != T_CONSTANT ) + { + console_printf( "¬02Operand is not a number¬07" ) ; + result.type = T_ERROR ; + return ; + } + result.value = -result.value ; + _snprintf( result.name, sizeof( result.name ), "%g", result.value ) ; + return ; + } + + for ( n = 0 ; n < dcb.data.NGloVars ; n++ ) + { + if ( dcb.glovar[n].ID == token.code ) + { + strcpy( result.name, token.name ) ; + result.type = T_VARIABLE ; + result.var = dcb.glovar[n] ; + result.data = ( uint8_t * )globaldata + dcb.glovar[n].Offset ; + + get_token() ; + return ; + } + } + + if ( strcmp( token.name, "MAIN" ) == 0 ) + token.code = dcb.proc[0].data.ID ; + + for ( n = 0 ; n < dcb.data.NProcs ; n++ ) + { + if ( dcb.proc[n].data.ID == token.code ) + { + INSTANCE * i = first_instance ; + + while ( i ) + { + if ( i->proc->type == ( int )n ) break ; + i = i->next ; + } + if ( !i ) + { + console_printf( "¬02No instance of process %s is active¬07", token.name ) ; + result.type = T_ERROR ; + return ; + } + + get_token() ; + if ( token.name[0] != '.' ) + { + console_printf( "¬02Invalid use of a process name¬07" ) ; + result.type = T_ERROR ; + return ; + } + get_token() ; + eval_local( &dcb.proc[n], i ) ; + return ; + } + } + + console_printf( "¬02Variable does not exist (%s)¬07", token.name ) ; + result.type = T_ERROR ; + return ; +} + +/* --------------------------------------------------------------------------- */ + +static void eval_value() +{ + eval_immediate() ; + if ( result.type == T_ERROR ) return ; + + for ( ;; ) + { + if ( token.name[0] == '.' ) + { + DCB_VARSPACE * v ; + DCB_VAR * var ; + unsigned int n ; + + var2const() ; + if ( result.type == T_CONSTANT ) + { + INSTANCE * i ; + i = instance_get(( int )result.value ) ; + if ( !i ) + { + result.type = T_ERROR ; + console_printf( "¬02Instance %d does not exist¬07", ( int )result.value ) ; + return ; + } + get_token() ; + eval_local( &dcb.proc[i->proc->type], i ) ; + continue; + } + + if ( result.type != T_VARIABLE + || result.var.Type.BaseType[0] != TYPE_STRUCT ) + { + console_printf( "¬02%s is not an struct¬07", result.name ); + result.type = T_ERROR ; + return ; + } + get_token() ; + if ( token.type != IDENTIFIER ) + { + console_printf( "¬02%s is not a member¬07", token.name ) ; + result.type = T_ERROR ; + return ; + } + + v = &dcb.varspace[result.var.Type.Members] ; + var = dcb.varspace_vars[result.var.Type.Members] ; + for ( n = 0 ; n < v->NVars ; n++ ) + { + if ( var[n].ID == token.code ) + break ; + } + if ( n == v->NVars ) + { + console_printf( "¬02%s is not a member¬07", token.name ) ; + result.type = T_ERROR ; + return ; + } + + result.type = T_VARIABLE ; + result.var = var[n] ; + result.data = ( uint8_t * )result.data + var[n].Offset ; + strcat( result.name, "." ) ; + strcat( result.name, token.name ) ; + get_token() ; + continue ; + } + + if ( token.name[0] == '[' ) + { + DCB_VAR i = result.var ; + void * i_data = result.data ; + char name[256] ; + + if ( result.type != T_VARIABLE || result.var.Type.BaseType[0] != TYPE_ARRAY ) + { + console_printf( "¬02%s is not an array¬07", result.name ) ; + result.type = T_ERROR ; + return ; + } + + strcpy( name, result.name ) ; + get_token() ; + eval_subexpression() ; + if ( result.type == T_ERROR ) return ; + if ( token.name[0] == ']' ) get_token() ; + var2const() ; + + if ( result.type != T_CONSTANT ) + { + console_printf( "¬02%s is not an integer¬07", result.name ) ; + result.type = T_ERROR ; + return ; + } + if ( result.value < 0 ) + { + console_printf( "¬02Index (%d) less than zero¬07", result.value ) ; + result.type = T_ERROR ; + return ; + } + if ( result.value >= i.Type.Count[0] ) + { + console_printf( "¬02Index (%d) out of bounds¬07", result.value ) ; + result.type = T_ERROR ; + return ; + } + + result.type = T_VARIABLE ; + result.var = i ; + result.var.Type = reduce_type( i.Type ) ; + result.data = ( uint8_t * )i_data + ( int )result.value * type_size( result.var.Type ) ; + _snprintf( result.name, sizeof( result.name ), "%s[%d]", name, ( int )result.value ) ; + continue ; + } + + break ; + } +} + +/* --------------------------------------------------------------------------- */ + +static void eval_factor() +{ + double base = 1 ; + int op = 0 ; + + for ( ;; ) + { + eval_value() ; + if ( result.type == T_ERROR ) return ; + if ( !strchr( "*/%", token.name[0] ) && !op ) return ; + var2const() ; + if ( result.type != T_CONSTANT ) + { + result.type = T_ERROR ; + console_printf( "¬02Operand is not a number¬07" ) ; + return ; + } + if ( !op ) op = 1 ; + if ( op > 1 && !result.value ) + { + result.type = T_ERROR ; + console_printf( "¬02Divide by zero¬07" ) ; + return ; + } + if ( op == 1 ) base *= result.value ; + if ( op == 2 ) base /= result.value ; + if ( op == 3 ) base = ( int )base % ( int )result.value ; + if ( !strchr( "*/%", token.name[0] ) ) + { + result.type = T_CONSTANT ; + result.value = base ; + _snprintf( result.name, sizeof( result.name ), "%g", base ) ; + return ; + } + op = ( token.name[0] == '*' ) ? 1 : ( token.name[0] == '/' ) ? 2 : 3 ; + get_token() ; + } +} + +/* --------------------------------------------------------------------------- */ + +static void eval_subexpression() +{ + double base = 0 ; + int op = 0 ; + + for ( ;; ) + { + eval_factor() ; + if ( result.type == T_ERROR ) return ; + if ( token.name[0] != '+' && token.name[0] != '-' && !op ) return ; + var2const() ; + if ( result.type != T_CONSTANT ) + { + result.type = T_ERROR ; + console_printf( "¬02Operand is not a number¬07" ) ; + return ; + } + if ( !op ) op = 1 ; + base += op * result.value ; + if ( token.name[0] != '+' && token.name[0] != '-' ) + { + result.type = T_CONSTANT ; + result.value = base ; + _snprintf( result.name, sizeof( result.name ), "%g", base ) ; + return ; + } + op = ( token.name[0] == '+' ) ? 1 : -1 ; + get_token() ; + } +} + +/* --------------------------------------------------------------------------- */ + +static char * eval_expression( const char * here, int interactive ) +{ + static char buffer[1024]; + static char part[1024]; + + while ( *here == ' ' ) here++; + + token_ptr = here ; + get_token() ; + eval_subexpression() ; + + if ( token.type != NOTOKEN && token.name[0] != ',' && token.name[0] != '=' ) + { + if ( result.type != T_ERROR ) + { + console_printf( "¬02Invalid expression¬07" ); + result.type = T_ERROR; + } + return 0; + } + + memset( part, 0, sizeof( buffer ) ); + strncpy( part, here, token_ptr - here - (( token.type != NOTOKEN ) ? 1 : 0 ) ); + + if ( result.type == T_CONSTANT ) + { + _snprintf( buffer, 1024, "%s = %g", part, result.value ); + if ( interactive ) console_printf( "¬07%s", buffer ) ; + } + else if ( result.type == T_STRING ) + { + if ( interactive ) console_printf( "¬07%s = \"%s\"", part, result.name ) ; + } + else if ( result.type == T_VARIABLE ) + { + lvalue = result ; + + if ( token.name[0] == '=' ) + { + if ( lvalue.type != T_VARIABLE ) + { + strcpy( buffer, "Not an lvalue" ) ; + if ( interactive ) console_printf( "¬02%s¬07", buffer ) ; + return buffer ; + } + get_token() ; + eval_subexpression() ; + if ( result.type == T_ERROR ) return "" ; + var2const() ; + + if (( lvalue.var.Type.BaseType[0] == TYPE_DWORD || lvalue.var.Type.BaseType[0] == TYPE_INT ) && result.type == T_CONSTANT ) + *( int * )( lvalue.data ) = ( int )result.value ; + else if (( lvalue.var.Type.BaseType[0] == TYPE_WORD || lvalue.var.Type.BaseType[0] == TYPE_SHORT ) && result.type == T_CONSTANT ) + *( uint16_t * )( lvalue.data ) = ( uint16_t )result.value ; + else if (( lvalue.var.Type.BaseType[0] == TYPE_BYTE || lvalue.var.Type.BaseType[0] == TYPE_SBYTE ) && result.type == T_CONSTANT ) + *( uint8_t * )( lvalue.data ) = ( uint8_t )result.value ; + else if ( lvalue.var.Type.BaseType[0] == TYPE_CHAR && result.type == T_STRING ) + { + if ( *result.name == '\\' && *( result.name + 1 ) == 'x' ) + *( uint8_t * )( lvalue.data ) = ( uint8_t )strtol( result.name + 2, NULL, 16 ); + else + *( uint8_t * )( lvalue.data ) = ( uint8_t ) * ( result.name ); + } + else if ( lvalue.var.Type.BaseType[0] == TYPE_FLOAT && result.type == T_CONSTANT ) + *( float * )( lvalue.data ) = ( float )result.value ; + else if ( lvalue.var.Type.BaseType[0] == TYPE_STRING && result.type == T_STRING ) + { + string_discard( *( uint32_t * ) lvalue.data ) ; + *( uint32_t * )( lvalue.data ) = string_new( result.name ) ; + string_use( *( uint32_t * ) lvalue.data ) ; + } + else + { + strcpy( buffer, "Invalid assignation" ) ; + if ( interactive ) console_printf( "¬02%s¬07", buffer ) ; + return buffer ; + } + } + + if ( interactive ) + { + show_var( lvalue.var, lvalue.name, lvalue.data, "", 0 ) ; + } + else + { + strcpy( buffer, part ) ; + strcat( buffer, " " ) ; + strcat( buffer, show_value( lvalue.var.Type, lvalue.data ) ); + } + } + + if ( token.name[0] == ',' ) + { + char * temporary = strdup( buffer ); + int size = strlen( temporary ); + + if ( eval_expression( token_ptr, interactive ) == 0 ) + { + free( temporary ); + return 0; + } + if ( strlen( buffer ) + size < 1020 && !interactive ) + { + memmove( buffer + size + 2, buffer, strlen( buffer ) + 1 ); + memcpy( buffer, temporary, size ); + memcpy( buffer + size, ", ", 2 ); + } + free( temporary ); + return buffer; + } + + return buffer; +} + +/* --------------------------------------------------------------------------- */ + +static void console_instance_dump( INSTANCE * father, int indent ) +{ + INSTANCE * i, * next ; + PROCDEF * proc ; + DCB_PROC * dcbproc ; + char buffer[128] ; + char line[128] ; + int n, nid, bigbro, son ; + + i = father ; + if ( !father ) i = first_instance ; + + proc = i->proc ; + dcbproc = &dcb.proc[proc->type] ; + + nid = LOCDWORD( mod_debug, i, PROCESS_ID ) ; + if ( dcb.data.NSourceFiles && dcbproc->data.ID ) + sprintf( buffer, "%s", getid_name( dcbproc->data.ID ) ) ; + else + sprintf( buffer, "%s", ( proc->type == 0 ) ? "MAIN" : "PROC" ) ; + + line[0] = 0 ; + for ( n = 0 ; n < indent - 1; n++ ) strcat( line, " \x03 " ); + + sprintf( line + strlen( line ), " \x01\x02 %-12s ", buffer ) ; + + n = strlen( line ) % 4 ; + while ( n && ( n++ < 4 ) ) strcat( line, " " ) ; + sprintf( line + strlen( line ), "%7d", nid ) ; + + if ( LOCDWORD( mod_debug, i, STATUS ) & STATUS_WAITING_MASK ) strcat( line, "[W]" ); + switch ( LOCDWORD( mod_debug, i, STATUS ) & ~STATUS_WAITING_MASK ) + { + case STATUS_DEAD : strcat( line, "[D]" ) ; break ; + case STATUS_KILLED : strcat( line, "[K]" ) ; break ; + case STATUS_RUNNING : strcat( line, " " ) ; break ; + case STATUS_SLEEPING : strcat( line, "[S]" ) ; break ; + case STATUS_FROZEN : strcat( line, "[F]" ) ; break ; + } + + console_printf( "¬07%s", line ) ; + + if ( !( son = LOCDWORD( mod_debug, i, SON ) ) ) return ; + + next = instance_get( son ) ; + if ( !next ) console_printf( "¬02\12**PANIC**\7 SON %d does not exist¬07", son ) ; + + i = next ; + + while ( i ) + { + proc = i->proc ; + dcbproc = &dcb.proc[proc->type] ; + + if ( LOCDWORD( mod_debug, i, SON ) ) + { + console_instance_dump( i, indent + 1 ) ; + } + else + { + nid = LOCDWORD( mod_debug, i, PROCESS_ID ) ; + if ( dcb.data.NSourceFiles && dcbproc->data.ID ) + { + sprintf( buffer, "%s", getid_name( dcbproc->data.ID ) ) ; + } + else + { + sprintf( buffer, "%s", ( proc->type == 0 ) ? "MAIN" : "PROC" ) ; + } + + line[0] = 0 ; + for ( n = 0 ; n < indent; n++ ) strcat( line, " \x03 " ); + + sprintf( line + strlen( line ), " \x01\x02 %-12s ", buffer ) ; + + n = strlen( line ) % 4 ; + while ( n && ( n++ < 4 ) ) strcat( line, " " ) ; + sprintf( line + strlen( line ), "%7d", nid ) ; + + if ( LOCDWORD( mod_debug, i, STATUS ) & STATUS_WAITING_MASK ) strcat( line, "[W]" ); + switch ( LOCDWORD( mod_debug, i, STATUS ) & ~STATUS_WAITING_MASK ) + { + case STATUS_DEAD : strcat( line, "[D]" ) ; break ; + case STATUS_KILLED : strcat( line, "[K]" ) ; break ; + case STATUS_RUNNING : strcat( line, " " ) ; break ; + case STATUS_SLEEPING : strcat( line, "[S]" ) ; break ; + case STATUS_FROZEN : strcat( line, "[F]" ) ; break ; + } + console_printf( "¬07%s", line ) ; + } + + if ( ( bigbro = LOCDWORD( mod_debug, i, BIGBRO ) ) ) + { + next = instance_get( bigbro ) ; + if ( !next ) console_printf( "¬02\12**PANIC**\7 BIGBRO %d does not exist¬07", bigbro ) ; + i = next ; + } + else + break ; + } +} + +/* --------------------------------------------------------------------------- */ +/* Muestra el árbol de instancias */ + +static void console_instance_dump_all() +{ + INSTANCE * i ; + int father; + + console_printf( "¬04INSTANCES TREE¬07\n\n" ); + + for ( i = first_instance ; i ; i = i->next ) + { + if ( !( father = LOCDWORD( mod_debug, i, FATHER )) || !instance_get( father ) ) + { + console_instance_dump( i, 1 ) ; + } + } + + console_printf( "\n" ) ; +} + +/* --------------------------------------------------------------------------- */ + +static void console_instance_dump_all_brief() +{ + INSTANCE * i ; + char status[30] ; + int father; + + console_printf( "¬04INSTANCES BRIEF LIST¬07\n\n" ); + console_printf( "¬04Id Father Status Name¬07\n" ); + + + for ( i = first_instance ; i ; i = i->next ) + { + status[0] = '\0'; + if ( LOCDWORD( mod_debug, i, STATUS ) & STATUS_WAITING_MASK ) + strcpy( status, "¬08wait¬07+" ); + + switch ( LOCDWORD( mod_debug, i, STATUS ) & ~STATUS_WAITING_MASK ) + { + case STATUS_DEAD : strcat( status, "¬06dead¬07 " ) ; break ; + case STATUS_KILLED : strcat( status, "¬02killed¬07 " ) ; break ; + case STATUS_SLEEPING : strcat( status, "¬09sleeping¬07" ) ; break ; + case STATUS_FROZEN : strcat( status, "¬05frozen¬07 " ) ; break ; + case STATUS_RUNNING : strcat( status, "¬12running¬07 " ) ; break ; + } + + if ( !( LOCDWORD( mod_debug, i, STATUS ) & STATUS_WAITING_MASK ) ) + strcat( status, " " ); + + + father = LOCDWORD( mod_debug, i, FATHER ); + + console_printf( "%-10d %s%-10d¬07 %s ¬15%s¬07\n", + LOCDWORD( mod_debug, i, PROCESS_ID ), + instance_get( father ) ? "" : "¬02", + father, + status, + ( dcb.data.NSourceFiles && dcb.proc[i->proc->type].data.ID ) ? getid_name( dcb.proc[i->proc->type].data.ID ) : (( i->proc->type == 0 ) ? "Main" : "proc" ) + ) ; + } + + console_printf( "\n" ) ; +} + +/* --------------------------------------------------------------------------- */ + +static int console_list_current = 0; +static int console_list_y_pos[2] = { 0 }; +static int console_list_x_pos[2] = { 0 }; +static int console_list_y_max[2] = { 0 }; +static INSTANCE * console_list_current_instance = NULL; + +#define WINDOW_LIST_COLS 40 + +static void show_list_window() +{ + int n; + int pos = console_list_y_pos[console_list_current] > console_y / CHARHEIGHT - 2 ? console_list_y_pos[console_list_current] - ( console_y / CHARHEIGHT - 2 ) : 0 ; + int x = ( scrbitmap->width - console_columns * CHARWIDTH ) / 2 + ( console_columns - WINDOW_LIST_COLS ) * CHARWIDTH ; + int y = 0; + + systext_color( 0x000000, 0xC0C0C0 ) ; + switch ( console_list_current ) + { + case 0: + console_list_y_max[0] = procdef_count ; + systext_puts( scrbitmap, x, y, "¬00¬21PROCESS TYPES", WINDOW_LIST_COLS ); + for ( n = 0 ; pos + n < procdef_count && y < console_y - CHARHEIGHT ; n++ ) + { + y += CHARHEIGHT; + if ( console_list_y_pos[console_list_current] == pos + n ) + { + if ( procs[pos + n].breakpoint ) + systext_puts( scrbitmap, x, y, "¬15¬19", 1 ); + else + systext_puts( scrbitmap, x, y, "¬15¬17", 1 ); + } + else + { + if ( procs[pos + n].breakpoint ) + systext_puts( scrbitmap, x, y, "¬15¬18", 1 ); + else + systext_puts( scrbitmap, x, y, "¬00¬23", 1 ); + } + if ( console_list_x_pos[console_list_current] < strlen( procs[pos + n].name ) ) + systext_puts( scrbitmap, x, y, &procs[pos + n].name[console_list_x_pos[console_list_current]], WINDOW_LIST_COLS ); + else + systext_puts( scrbitmap, x, y, "", WINDOW_LIST_COLS ); + } + break; + + case 1: + { + INSTANCE * i ; + int c ; + char line[128]; + char status[10]; + + console_list_y_max[1] = 0 ; + + systext_puts( scrbitmap, x, y, "¬00¬21INSTANCES", WINDOW_LIST_COLS ); + + for ( c = 0, n = 0, i = first_instance ; i ; i = i->next, c++ ) + { + console_list_y_max[1]++ ; + + if ( c < pos || y >= console_y - CHARHEIGHT ) continue ; + y += CHARHEIGHT; + + if ( console_list_y_pos[console_list_current] == pos + n ) + { + console_list_current_instance = i; + + if ( i->breakpoint ) + systext_puts( scrbitmap, x, y, "¬15¬19", 1 ); + else + systext_puts( scrbitmap, x, y, "¬15¬17", 1 ); + } + else + { + if ( i->breakpoint ) + systext_puts( scrbitmap, x, y, "¬15¬18", 1 ); + else + systext_puts( scrbitmap, x, y, "¬00¬23", 1 ); + } + + status[0] = '\0'; + if ( LOCDWORD( mod_debug, i, STATUS ) & STATUS_WAITING_MASK ) strcat( status, "[W]" ); + switch ( LOCDWORD( mod_debug, i, STATUS ) & ~STATUS_WAITING_MASK ) + { + case STATUS_DEAD : strcat( status, "[D]" ) ; break ; + case STATUS_KILLED : strcat( status, "[K]" ) ; break ; + case STATUS_SLEEPING : strcat( status, "[S]" ) ; break ; + case STATUS_FROZEN : strcat( status, "[F]" ) ; break ; + case STATUS_RUNNING : strcat( status, "[R]" ) ; break ; + } + + sprintf( line, "%d %-6.6s %s", + LOCDWORD( mod_debug, i, PROCESS_ID ), + status, + ( dcb.data.NSourceFiles && dcb.proc[i->proc->type].data.ID ) ? getid_name( dcb.proc[i->proc->type].data.ID ) : (( i->proc->type == 0 ) ? "Main" : "proc" ) + ); + if ( console_list_x_pos[console_list_current] < strlen( line ) ) + systext_puts( scrbitmap, x, y, &line[console_list_x_pos[console_list_current]], WINDOW_LIST_COLS ); + else + systext_puts( scrbitmap, x, y, "", WINDOW_LIST_COLS ); + + n++ ; + } + } + break; + } +} + +/* --------------------------------------------------------------------------- */ + +static INSTANCE * findproc( INSTANCE * last, char * action, char * ptr ) +{ + INSTANCE * i = NULL; + char * aptr; + int procno = 0; + int n; + + if ( *ptr ) + { + if ( *ptr >= '0' && *ptr <= '9' ) + { + if ( last ) return NULL; + procno = atoi( ptr ); + for ( i = first_instance ; i ; i = i->next ) + if ( LOCDWORD( mod_debug, i, PROCESS_ID ) == procno ) + break; + if ( !i ) + { + console_printf( "¬02Instance %d does not exist¬07", procno ); + return NULL; + } + } + else + { + aptr = action; + while ( ISWORDCHAR( *ptr ) ) + { + *aptr++ = TOUPPER( *ptr ); ptr++; + } + *aptr = 0; + + for ( n = 0 ; n < ( int )dcb.data.NID ; n++ ) + if ( strcmp( ( char * )dcb.id[n].Name, action ) == 0 ) + break; + for ( procno = 0 ; procno < ( int )dcb.data.NProcs ; procno++ ) + if ( dcb.proc[procno].data.ID == dcb.id[n].Code ) + break; + if ( procno == ( int )dcb.data.NProcs ) + { + console_printf( "¬02Unknown process %s¬07", action ); + return NULL; + } + for ( i = last ? last->next : first_instance ; i ; i = i->next ) + if ( i->proc->type == procno ) + break; + if ( !i && !last ) + { + console_printf( "¬02No instance of process %s created¬07", action ); + return NULL; + } + } + } + + return ( i ); +} + +/* --------------------------------------------------------------------------- */ + +static void console_do( const char * command ) +{ + char * ptr, * aptr ; + char action[256] ; + unsigned int var ; + int n, procno = 0; + PROCDEF * p = NULL ; + INSTANCE * i = NULL ; + + ptr = ( char * ) command ; + while ( *ptr && *ptr != ' ' ) ptr++ ; + strncpy( action, command, ptr - command ) ; + action[ptr - command] = 0 ; + while ( *ptr == ' ' ) ptr++ ; + aptr = action ; + while ( *aptr ) + { + *aptr = TOUPPER( *aptr ); + aptr++; + } + + /* Comandos */ + + if ( strcmp( action, "HELP" ) == 0 ) + { + console_printf( HELPTXT ); + return; + } + + if ( strcmp( action, "GO" ) == 0 ) + { + SDL_EnableKeyRepeat( 0, 0 ); + debug_mode = 0; + debug_on_frame = 0; + force_debug = 0; + debug_next = 0; + break_on_next_proc = 0; + console_showing = 0 ; + return ; + } + + if ( strcmp( action, "NEXTFRAME" ) == 0 ) + { + SDL_EnableKeyRepeat( 0, 0 ); + break_on_next_proc = 0; + debug_mode = 0; + debug_on_frame = 1; + force_debug = 0; + debug_next = 0; + break_on_next_proc = 0; + return ; + } + + if ( strcmp( action, "NEXTPROC" ) == 0 ) + { + SDL_EnableKeyRepeat( 0, 0 ); + debug_mode = 0; + debug_on_frame = 0; + force_debug = 0; + debug_next = 0; + break_on_next_proc = 1; + return ; + } + + if ( strcmp( action, "TRACE" ) == 0 ) + { + SDL_EnableKeyRepeat( 0, 0 ); + debug_mode = 0; + debug_on_frame = 0; + force_debug = 0; + debug_next = 1; + break_on_next_proc = 0; + return ; + } + + if ( strcmp( action, "BREAK" ) == 0 ) + { + if ( *ptr ) + { + if ( *ptr >= '0' && *ptr <= '9' ) + { + procno = atoi( ptr ); + for ( i = first_instance ; i ; i = i->next ) + if ( LOCDWORD( mod_debug, i, PROCESS_ID ) == procno ) + break; + if ( !i ) + { + console_printf( "¬02Instance %d does not exist¬07", procno ); + } + else + { + i->breakpoint = 1; + console_printf( "¬07OK" ); + } + } + else + { + aptr = action; + while ( ISWORDCHAR( *ptr ) ) + { + *aptr++ = TOUPPER( *ptr ); ptr++; + } + *aptr = 0; + + if ( *action ) + { + p = procdef_get_by_name( action ); + if ( !p ) + { + console_printf( "¬02Process type %d does not exist¬07", action ); + } + else + { + p->breakpoint = 1; + console_printf( "¬07OK" ); + } + } + } + } + else + { + int f = 0; + for ( n = 0 ; n < procdef_count; n++ ) + { + if ( procs[n].breakpoint ) + { + if ( !f ) + { + console_printf( "¬04PROCESS TYPE BREAKPOINTS¬07\n\n" ); + f = 1; + } + console_printf( "¬07%s\n", procs[n].name ); + } + } + if ( f ) + console_printf( "\n" ); + + f = 0; + for ( i = first_instance ; i ; i = i->next ) + { + if ( i->breakpoint ) + { + if ( !f ) + { + console_printf( "¬04PROCESS BREAKPOINTS¬07\n\n" ); + f = 1; + } + console_printf( "¬07%d", LOCDWORD( mod_debug, i, PROCESS_ID ) ); + } + } + if ( f ) console_printf( "\n" ); + } + return ; + } + + if ( strcmp( action, "BREAKALL" ) == 0 ) + { + for ( i = first_instance ; i ; i = i->next ) i->breakpoint = 1; + console_printf( "¬07OK" ); + return ; + } + + if ( strcmp( action, "BREAKALLTYPES" ) == 0 ) + { + for ( n = 0 ; n < procdef_count; n++ ) procs[n].breakpoint = 1; + console_printf( "¬07OK" ); + return ; + } + + if ( strcmp( action, "DELETEALL" ) == 0 ) + { + for ( i = first_instance ; i ; i = i->next ) i->breakpoint = 0; + console_printf( "¬07OK" ); + return ; + } + + if ( strcmp( action, "DELETEALLTYPES" ) == 0 ) + { + for ( n = 0 ; n < procdef_count; n++ ) procs[n].breakpoint = 0; + console_printf( "¬07OK" ); + return ; + } + + if ( strcmp( action, "DELETE" ) == 0 ) + { + if ( *ptr ) + { + if ( *ptr >= '0' && *ptr <= '9' ) + { + procno = atoi( ptr ); + for ( i = first_instance ; i ; i = i->next ) + if ( LOCDWORD( mod_debug, i, PROCESS_ID ) == procno ) + break; + if ( !i ) + { + console_printf( "¬02Instance %d does not exist¬07", procno ); + } + else + { + i->breakpoint = 0; + console_printf( "¬07OK" ); + } + } + else + { + aptr = action; + while ( ISWORDCHAR( *ptr ) ) + { + *aptr++ = TOUPPER( *ptr ); ptr++; + } + *aptr = 0; + + p = procdef_get_by_name( action ); + if ( !p ) + { + console_printf( "¬02Process type %d does not exist¬07", procno ); + } + else + { + p->breakpoint = 0; + console_printf( "¬07OK" ); + } + } + } + return ; + } + + if ( strcmp( action, "STRINGS" ) == 0 ) + { + string_dump(console_printf) ; + return ; + } + + if ( strcmp( action, "INSTANCES" ) == 0 ) + { + console_instance_dump_all() ; + return ; + } + + if ( strcmp( action, "GLOBALS" ) == 0 ) + { + for ( var = 0 ; var < dcb.data.NGloVars ; var++ ) + { + DCB_VAR * v = &dcb.glovar[var] ; + show_var( *v, 0, ( uint8_t * )globaldata + v->Offset, "[GLO]", 0 ) ; + } + console_printf( "\n" ); + return ; + } + + if ( + strcmp( action, "LOCALS" ) == 0 || + strcmp( action, "PRIVATES" ) == 0 || + strcmp( action, "PUBLICS" ) == 0 ) + { + int show_locals = action[0] == 'L'; + int show_public = action[0] == 'P' && action[1] == 'U' ; + + i = findproc( NULL, action, ptr ); + + if ( show_locals ) + { + for ( var = 0 ; var < dcb.data.NLocVars ; var++ ) + { + DCB_VAR * v = &dcb.locvar[var] ; + show_var( *v, 0, i ? ( char* )i->locdata + v->Offset : 0, "[LOC]", 0 ) ; + } + } + else if ( show_public ) + { + if ( !i ) + { + console_printf( "¬07Use: PUBLICS process" ); + return; + } + for ( var = 0 ; var < dcb.proc[i->proc->type].data.NPubVars ; var++ ) + { + DCB_VAR * v = &dcb.proc[i->proc->type].pubvar[var] ; + + /* Unnamed private vars are temporary params and loop + counters, and are ignored by this command */ + if (( int )v->ID >= 0 ) + { + show_var( *v, 0, ( char* )i->pubdata + v->Offset, "[PUB]", 0 ) ; + } + } + } + else + { + if ( !i ) + { + console_printf( "¬07Use: PRIVATES process" ); + return; + } + for ( var = 0 ; var < dcb.proc[i->proc->type].data.NPriVars ; var++ ) + { + DCB_VAR * v = &dcb.proc[i->proc->type].privar[var] ; + + /* Unnamed private vars are temporary params and loop + counters, and are ignored by this command */ + if (( int )v->ID >= 0 ) + { + show_var( *v, 0, ( char* )i->pridata + v->Offset, "[PRI]", 0 ) ; + } + } + } + console_printf( "\n" ); + return ; + } + + if ( strcmp( action, "SHOW" ) == 0 ) + { + if ( *ptr ) + { + char * res = eval_expression( ptr, 0 ); + + if ( !res || result.type == T_STRING ) + { + console_printf( "¬02Invalid argument¬07" ); + return ; + } + + for ( n = 0; n < MAX_EXPRESSIONS; n++ ) + { + if ( show_expression[n] && !strcmp( show_expression[n], ptr ) ) + { + console_printf( "¬02Already exists¬07" ); + return ; + } + } + + for ( n = 0; n < MAX_EXPRESSIONS; n++ ) + { + if ( !show_expression[n] ) + { + show_expression[n] = strdup( ptr ); + show_expression_count++; + console_printf( "¬07OK" ); + return; + } + } + + console_printf( "¬02No more expressions are possibles¬07" ); + } + else + { + int nn; + for ( n = 0; n < MAX_EXPRESSIONS; n++ ) + { + if ( show_expression[n] ) + { + console_printf( "%d: %s", n + 1, show_expression[n] ); + nn++; + } + } + + if ( !nn ) console_printf( "¬02No expressions availables¬07" ); + } + + return; + } + + + if ( strcmp( action, "SHOWDEL" ) == 0 ) + { + if ( *ptr ) + { + char * p = ptr; + + while( ISNUM( *p ) ) p++; + + if ( ISNUM( *ptr ) ) + { + int pos = atol( ptr ) - 1; + if ( pos >= 0 && pos < MAX_EXPRESSIONS && show_expression[pos] ) + { + free( show_expression[pos] ); + show_expression[pos] = NULL; + show_expression_count--; + console_printf( "¬07OK" ); + return; + } + } + } + + console_printf( "¬02Invalid argument¬07" ); + + return; + } + + if ( strcmp( action, "SHOWDELALL" ) == 0 ) + { + for ( n = 0; n < MAX_EXPRESSIONS; n++ ) + { + if ( show_expression[n] ) + { + free( show_expression[n] ); + show_expression[n] = NULL; + show_expression_count--; + } + } + console_printf( "¬07OK" ); + return; + } + + if ( strcmp( action, "VARS" ) == 0 ) + { + for ( var = 0 ; var < N_CONSOLE_VARS ; var++ ) + { + switch ( console_vars[var].type ) + { + case CON_DWORD: + console_printf( "¬07%s = %d\n", console_vars[var].name, *( int * )console_vars[var].value ) ; + break; + + case CON_DWORD_HEX: + console_printf( "¬07%s = %08Xh\n", console_vars[var].name, *( int * )console_vars[var].value ) ; + break; + } + } + console_printf( "\n" ); + return ; + } + + if ( strcmp( action, "RUN" ) == 0 ) + { + if ( *ptr ) + { + aptr = action; + while ( ISWORDCHAR( *ptr ) ) + { + *aptr++ = TOUPPER( *ptr ); ptr++; + } + *aptr = 0; + + if ( *action ) + { + int i; + INSTANCE * inst ; + p = procdef_get_by_name( action ); + if ( p ) + { + token_ptr = ptr ; + console_printf( "¬07%s", ptr ); + inst = instance_new( p, NULL ); + + for ( i = 0; i < p->params; i++ ) + { + int type = dcb.proc[p->type].privar[i].Type.BaseType[0]; + get_token() ; + eval_subexpression() ; + + if ( result.type == T_VARIABLE ) + var2const(); + + switch ( result.type ) + { + case T_CONSTANT: + switch ( type ) + { + case TYPE_FLOAT: + PRIDWORD( inst, 4*i ) = *( int * ) & result.value ; + break; + + case TYPE_INT: + case TYPE_DWORD: + case TYPE_POINTER: + case TYPE_SHORT: + case TYPE_WORD: + case TYPE_BYTE: + case TYPE_SBYTE: + case TYPE_CHAR: + PRIDWORD( inst, 4*i ) = ( int ) result.value ; + break; + + case TYPE_STRING: + default: + instance_destroy( inst ); + console_printf( "¬02Invalid argument %d¬07", i ); + return; + } + break; + + case T_STRING: + PRIDWORD( inst, 4*i ) = ( int ) string_new( result.name ) ; + string_use( PRIDWORD( inst, 4*i ) ); + break; + + case T_VARIABLE: + default: + instance_destroy( inst ); + console_printf( "¬02Invalid argument %d¬07", i ); + return; + } + } + console_printf( "¬07Process %s is executed", p->name ); + } + else + { + console_printf( "¬02Process %s not found¬07", action ); + } + return; + } + } + } + + if ( + strcmp( action, "KILLALL" ) == 0 || + strcmp( action, "SLEEPALL" ) == 0 || + strcmp( action, "WAKEUPALL" ) == 0 || + strcmp( action, "FREEZEALL" ) == 0 ) + { + char act = *action; + int found = 0; + char * oaction = strdup( action ); + char * optr = ptr; + + i = NULL; + while (( i = findproc( i, action, ptr ) ) ) + { + found = 1; + switch ( act ) + { + case 'K': + LOCDWORD( mod_debug, i, STATUS ) = ( LOCDWORD( mod_debug, i, STATUS ) & STATUS_WAITING_MASK ) | STATUS_KILLED ; + break; + + case 'W': + LOCDWORD( mod_debug, i, STATUS ) = ( LOCDWORD( mod_debug, i, STATUS ) & STATUS_WAITING_MASK ) | STATUS_RUNNING ; + break ; + + case 'S': + LOCDWORD( mod_debug, i, STATUS ) = ( LOCDWORD( mod_debug, i, STATUS ) & STATUS_WAITING_MASK ) | STATUS_SLEEPING ; + break ; + + case 'F': + LOCDWORD( mod_debug, i, STATUS ) = ( LOCDWORD( mod_debug, i, STATUS ) & STATUS_WAITING_MASK ) | STATUS_FROZEN ; + break; + } + strcpy( action, oaction ); + ptr = optr; + } + + if ( oaction ) free( oaction ); + if ( found ) console_printf( "¬07OK" ); + return ; + } + + if ( + strcmp( action, "KILL" ) == 0 || + strcmp( action, "SLEEP" ) == 0 || + strcmp( action, "WAKEUP" ) == 0 || + strcmp( action, "FREEZE" ) == 0 ) + { + char act = *action; + i = findproc( NULL, action, ptr ); + if ( !i ) return; + + switch ( act ) + { + case 'K': + LOCDWORD( mod_debug, i, STATUS ) = ( LOCDWORD( mod_debug, i, STATUS ) & STATUS_WAITING_MASK ) | STATUS_KILLED ; + break; + + case 'W': + LOCDWORD( mod_debug, i, STATUS ) = ( LOCDWORD( mod_debug, i, STATUS ) & STATUS_WAITING_MASK ) | STATUS_RUNNING ; + break ; + + case 'S': + LOCDWORD( mod_debug, i, STATUS ) = ( LOCDWORD( mod_debug, i, STATUS ) & STATUS_WAITING_MASK ) | STATUS_SLEEPING ; + break ; + + case 'F': + LOCDWORD( mod_debug, i, STATUS ) = ( LOCDWORD( mod_debug, i, STATUS ) & STATUS_WAITING_MASK ) | STATUS_FROZEN ; + break; + } + console_printf( "¬07OK" ); + return ; + } + + if ( strcmp( action, "QUIT" ) == 0 ) + { + bgdrtm_exit( 1 ) ; + return ; + } + + /* Variables del ENGINE */ + + for ( var = 0 ; var < N_CONSOLE_VARS ; var++ ) + { + if ( strcmp( console_vars[var].name, action ) == 0 ) + { + switch ( console_vars[var].type ) + { + case CON_DWORD: + if ( *ptr ) + { + while ( *ptr == '=' || *ptr == ' ' ) ptr++; + eval_expression( ptr, 0 ); + if ( result.type != T_ERROR ) + *( int * )console_vars[var].value = ( int ) result.value ; + } + console_printf( "¬07%s = %d", console_vars[var].name, *( int * )console_vars[var].value ) ; + return ; + + case CON_DWORD_HEX: + if ( *ptr ) + { + while ( *ptr == '=' || *ptr == ' ' ) ptr++; + eval_expression( ptr, 0 ); + if ( result.type != T_ERROR ) + *( int * )console_vars[var].value = ( int ) result.value ; + } + console_printf( "¬07%s = %08Xh\n", console_vars[var].name, *( int * )console_vars[var].value ) ; + return ; + } + } + } + + /* Expresiones */ + + eval_expression( command, 1 ) ; +} + +/* --------------------------------------------------------------------------- */ +/* Hotkey for exit (ALT+X) */ +/* --------------------------------------------------------------------------- */ + +static int force_exit_cb( SDL_keysym k ) +{ + exit_value = 0; + must_exit = 1 ; + return 1; +} + +/* --------------------------------------------------------------------------- */ +/* Hotkeys for activate/deactivate console */ +/* --------------------------------------------------------------------------- */ + +static int console_keyboard_handler_cb( SDL_keysym k ) +{ + char cmd[256]; + + if ( dcb.data.NSourceFiles ) + { + if (( k.mod & KMOD_LALT ) && k.sym == SDLK_c ) + { + if ( !debug_mode ) + { + SDL_EnableKeyRepeat( 250, 50 ); + debug_mode = 1; + force_debug = 1; + console_showing = 1 ; + } + else + { + SDL_EnableKeyRepeat( 0, 0 ); + debug_mode = 0; + force_debug = 0; + console_showing = 0 ; + break_on_next_proc = 0; + } + return 1; + } + + if ( debug_mode ) + { + if ( k.sym == SDLK_F1 ) + { + console_do( "HELP" ); + return 1; + } + + if ( k.mod & KMOD_LALT ) + { + if ( k.sym == SDLK_LEFT ) + { + if ( console_columns > HOTKEYHELP_SIZE ) console_columns-- ; + return 1; + } + + if ( k.sym == SDLK_RIGHT ) + { + if ( console_columns < scrbitmap->width / CHARWIDTH ) console_columns++ ; + return 1; + } + + if ( k.sym == SDLK_UP ) + { + if ( console_lines > 10 ) console_lines-- ; + return 1; + } + + if ( k.sym == SDLK_DOWN ) + { + if ( console_lines < scrbitmap->height / CHARHEIGHT ) console_lines++ ; + return 1; + } + } + + if ( k.mod & ( KMOD_LSHIFT | KMOD_RSHIFT ) ) + { + if ( k.sym == SDLK_LEFT ) + { + if ( console_list_x_pos[console_list_current] > 0 ) console_list_x_pos[console_list_current]-- ; + return 1; + } + + if ( k.sym == SDLK_RIGHT ) + { + console_list_x_pos[console_list_current]++ ; + return 1; + } + + if ( k.sym == SDLK_UP ) + { + if ( console_list_y_pos[console_list_current] > 0 ) console_list_y_pos[console_list_current]-- ; + return 1; + } + + if ( k.sym == SDLK_DOWN ) + { + if ( console_list_y_pos[console_list_current] < console_list_y_max[console_list_current] - 1 ) console_list_y_pos[console_list_current]++ ; + return 1; + } + + if ( k.sym == SDLK_F2 ) + { + console_instance_dump_all_brief(); + return 1; + } + + if ( console_list_current_instance && console_list_current == 1 ) + { + if ( k.sym == SDLK_F3 ) + { + int id = LOCDWORD( mod_debug, console_list_current_instance, PROCESS_ID ) ; + console_printf( "¬04%s (%d) LOCALS¬07\n\n", + ( dcb.data.NSourceFiles && dcb.proc[console_list_current_instance->proc->type].data.ID ) ? getid_name( dcb.proc[console_list_current_instance->proc->type].data.ID ) : (( console_list_current_instance->proc->type == 0 ) ? "Main" : "proc" ), + id + ); + sprintf( cmd, "LOCALS %d", id ) ; + console_do( cmd ); + return 1; + } + + if ( k.sym == SDLK_F4 ) + { + int id = LOCDWORD( mod_debug, console_list_current_instance, PROCESS_ID ) ; + console_printf( "¬04%s (%d) PRIVATES¬07\n\n", + ( dcb.data.NSourceFiles && dcb.proc[console_list_current_instance->proc->type].data.ID ) ? getid_name( dcb.proc[console_list_current_instance->proc->type].data.ID ) : (( console_list_current_instance->proc->type == 0 ) ? "Main" : "proc" ), + id + ); + sprintf( cmd, "PRIVATES %d", id ) ; + console_do( cmd ); + return 1; + } + + if ( k.sym == SDLK_F5 ) + { + int id = LOCDWORD( mod_debug, console_list_current_instance, PROCESS_ID ) ; + console_printf( "¬04%s (%d) PUBLICS¬07\n\n", + ( dcb.data.NSourceFiles && dcb.proc[console_list_current_instance->proc->type].data.ID ) ? getid_name( dcb.proc[console_list_current_instance->proc->type].data.ID ) : (( console_list_current_instance->proc->type == 0 ) ? "Main" : "proc" ), + id + ); + sprintf( cmd, "PUBLICS %d", id ) ; + console_do( cmd ); + return 1; + } + } + + if ( k.sym == SDLK_F6 ) + { + console_list_current ^= 1; + return 1; + } + + if ( k.sym == SDLK_F9 ) + { + switch ( console_list_current ) + { + case 0: + procs[console_list_y_pos[console_list_current]].breakpoint = !procs[console_list_y_pos[console_list_current]].breakpoint; + break; + + case 1: + if ( console_list_current_instance ) console_list_current_instance->breakpoint = !console_list_current_instance->breakpoint; + break; + } + return 1; + } + } + + if ( k.sym == SDLK_F2 ) + { + console_instance_dump_all() ; + return 1; + } + + if ( !( k.mod & ( KMOD_LSHIFT | KMOD_RSHIFT ) ) ) + { + if ( k.sym == SDLK_F5 ) + { + console_do( "GO" ); + return 1; + } + + if ( k.sym == SDLK_F8 ) + { + console_do( "TRACE" ); + return 1; + } + + if ( k.sym == SDLK_F10 ) + { + console_do( "NEXTFRAME" ); + return 1; + } + + if ( k.sym == SDLK_F11 ) + { + console_do( "NEXTPROC" ); + return 1; + } + } + + if ( k.sym == SDLK_PAGEUP ) + { + console_scroll( console_lines ) ; + return 1; + } + + if ( k.sym == SDLK_PAGEDOWN ) + { + console_scroll( -console_lines ) ; + return 1; + } + + if ( k.mod & ( KMOD_RCTRL | KMOD_LCTRL ) ) + { + if ( k.sym == SDLK_LEFT ) + { + console_lateral_scroll( 1 ) ; + return 1; + } + + if ( k.sym == SDLK_RIGHT ) + { + console_lateral_scroll( -1 ) ; + return 1; + } + + if ( k.sym == SDLK_UP ) + { + console_scroll( 1 ) ; + return 1; + } + + if ( k.sym == SDLK_DOWN ) + { + console_scroll( -1 ) ; + return 1; + } + } + + if ( !( k.mod & KMOD_LALT ) ) console_getkey( k.unicode, k.sym ) ; + return 1; + } + } + + return 0; +} + +/* --------------------------------------------------------------------------- */ + +static void console_draw( INSTANCE * i, REGION * clip ) +{ + int x, y, line, count ; + + if ( break_on_next_proc ) return ; + + if ( debug_on_frame || force_debug ) + { + SDL_EnableKeyRepeat( 250, 50 ); + debug_on_frame = 0; + force_debug = 0; + debug_mode = 1; + console_showing = 1 ; + } + + if ( console_columns > scrbitmap->width / CHARWIDTH ) + console_columns = scrbitmap->width / CHARWIDTH ; + + if ( console_lines > ( scrbitmap->height - CHARHEIGHT * 3 ) / CHARHEIGHT ) + console_lines = ( scrbitmap->height - CHARHEIGHT * 3 ) / CHARHEIGHT ; + + if ( console_showing ) + { + if ( console_y < console_lines * CHARHEIGHT ) console_y += CHARHEIGHT ; + if ( console_y > console_lines * CHARHEIGHT ) console_y = console_lines * CHARHEIGHT ; + } + else + { + if ( console_y > 0 ) console_y -= CHARHEIGHT ; + if ( console_y < 0 ) console_y = 0 ; + } + + x = ( scrbitmap->width - console_columns * CHARWIDTH ) / 2 ; + y = -console_lines * CHARHEIGHT + console_y ; + + int current_show = 0; + + for ( count = 0; count < MAX_EXPRESSIONS; count++ ) + { + if ( show_expression[count] ) + { + char * res = eval_expression( show_expression[count], 0 ); + + if ( !res || result.type == T_ERROR ) + { + free( show_expression[count] ); + show_expression[count] = NULL; + show_expression_count--; + } + else + { + int ln = strlen( res ); + int rl = ln * CHARWIDTH; + int xo = ( scrbitmap->width - rl ) / 2; + int yo = ( ( console_y < 1 ) ? 2 : console_y + CHARHEIGHT * 2 + 1 ) + CHARHEIGHT * current_show; + + systext_color( 0, 0 ) ; + systext_puts( scrbitmap, xo - 1, yo - 1, res, ln ); + systext_puts( scrbitmap, xo - 1, yo , res, ln ); + systext_puts( scrbitmap, xo - 1, yo + 1, res, ln ); + systext_puts( scrbitmap, xo , yo + 1, res, ln ); + systext_puts( scrbitmap, xo + 1, yo + 1, res, ln ); + systext_puts( scrbitmap, xo + 1, yo , res, ln ); + systext_puts( scrbitmap, xo + 1, yo - 1, res, ln ); + systext_puts( scrbitmap, xo , yo - 1, res, ln ); + + systext_color( console_showcolor, 0 ) ; + systext_puts( scrbitmap, xo, yo, res, ln ); + + gr_mark_rect( xo, yo, rl, CHARHEIGHT); + current_show++; + } + } + } + + if ( console_y <= 0 ) return ; + + int shiftstatus = GLODWORD( mod_debug, SHIFTSTATUS ) ; + + line = console_tail ; + + for ( count = 0 ; count < console_lines + console_scroll_pos ; count++ ) + { + if ( line == console_head ) break ; + line-- ; + if ( line < 0 ) line = CONSOLE_HISTORY - 1 ; + } + console_scroll_pos = count - console_lines ; + if ( console_scroll_pos < 0 ) console_scroll_pos = 0 ; + + for ( count = 0; count < console_lines; count++ ) + { + systext_color( 0xC0C0C0, 0x000020 ) ; + if ( !console[line] || console_scroll_lateral_pos >= strlen( console[line] ) ) + { + systext_puts( scrbitmap, x, y, "", console_columns ) ; + } + else + { + int pos = 0 ; + int off = 0; + + do + { + if ( console[line][pos] == '¬' ) + { + off += 3; + systext_puts( scrbitmap, x, y, console[line] + pos, 3 ) ; + } + pos++; + } + while ( pos - off < console_scroll_lateral_pos ) ; + + if ( console_scroll_lateral_pos + off < strlen( console[line] ) ) + systext_puts( scrbitmap, x, y, console[line] + console_scroll_lateral_pos + off, console_columns ) ; + else + systext_puts( scrbitmap, x, y, "", console_columns ) ; + } + + y += CHARHEIGHT ; + line++ ; + if ( line == CONSOLE_HISTORY ) line = 0 ; + } + + if ( console_showing && trace_sentence != -1 ) + { + if ( dcb.data.Version < 0x0710 ) + { + if ( trace_instance && instance_exists( trace_instance ) && dcb.sourcecount[trace_sentence >> 24] ) + { + console_printf( "¬07[%s(%d):%d]\n¬14%s¬07\n\n", + trace_instance->proc->name, + LOCDWORD( mod_debug, trace_instance, PROCESS_ID ), + trace_sentence & 0xFFFFFF, + dcb.sourcelines [trace_sentence >> 24] [( trace_sentence & 0xFFFFFF )-1] ) ; + } + } + else + { + if ( trace_instance && instance_exists( trace_instance ) && dcb.sourcecount[trace_sentence >> 20] ) + { + console_printf( "¬07[%s(%d):%d]\n¬14%s¬07\n\n", + trace_instance->proc->name, + LOCDWORD( mod_debug, trace_instance, PROCESS_ID ), + trace_sentence & 0xFFFFF, + dcb.sourcelines [trace_sentence >> 20] [( trace_sentence & 0xFFFFF )-1] ) ; + } + } + debug_on_frame = 0; + force_debug = 0; + debug_next = 0; + trace_sentence = -1; + } + + systext_color( 0xFFFFFF, 0x404040 ) ; + systext_puts( scrbitmap, x, y, ">", 2 ) ; + strcat( console_input, "_" ) ; + systext_puts( scrbitmap, x + CHARWIDTH*2, y, console_input, console_columns - 2 ) ; + console_input[strlen( console_input )-1] = 0 ; + + if ( shiftstatus & 3 ) + { + show_list_window(); + systext_color( 0x404040, 0x00C0C0 ) ; + if ( console_list_current ) + systext_puts( scrbitmap, x, y + CHARHEIGHT, HOTKEYHELP3, console_columns ) ; + else + systext_puts( scrbitmap, x, y + CHARHEIGHT, HOTKEYHELP2, console_columns ) ; + } + else + { + systext_color( 0x404040, 0x00C0C0 ) ; + systext_puts( scrbitmap, x, y + CHARHEIGHT, HOTKEYHELP1, console_columns ) ; + } +} + +/* --------------------------------------------------------------------------- */ + +static int console_info( INSTANCE * i, REGION * clip, int * z, int * drawme ) +{ + * drawme = debug_mode || show_expression_count || ( console_y > 0 ); + + if ( debug_mode || ( console_y > 0 ) ) + { + clip->x = 0; + clip->y = 0; + clip->x2 = scrbitmap->width ; + clip->y2 = scrbitmap->height ; + } + else if ( show_expression_count ) + { + int count, rl = 0, l; + + for ( count = 0; count < MAX_EXPRESSIONS; count++ ) + { + if ( show_expression[count] ) + { + char * res = eval_expression( show_expression[count], 0 ); + + if ( !res ) + { + free( show_expression[count] ); + show_expression[count] = NULL; + show_expression_count--; + } + else + { + if ( ( l = strlen( res ) * CHARWIDTH ) > rl ) rl = l ; + } + } + } + + if ( !show_expression_count ) + { + *drawme = 0; + return 0; + } + + clip->x = ( scrbitmap->width - rl ) / 2 ; + clip->y = ( console_y <= 0 ) ? 0 : ( console_y + CHARHEIGHT ) ; + clip->x2 = clip->x + rl ; + clip->y2 = CHARHEIGHT * show_expression_count; + } + + return * drawme ; +} + +/* --------------------------------------------------------------------------- */ + +static int moddebug_trace( INSTANCE * my, int * params ) +{ + debug = params[0]; + return 0 ; +} + +/* --------------------------------------------------------------------------- */ + +void __bgdexport( mod_debug, process_exec_hook )( INSTANCE * r ) +{ + if ( break_on_next_proc ) + { + debug_next = 1; + break_on_next_proc = 0; + } +} + +/* --------------------------------------------------------------------------- */ +/* Funciones de inicializacion del modulo/plugin */ + +void __bgdexport( mod_debug, module_initialize )() +{ + if ( dcb.data.NSourceFiles ) + { + hotkey_add( KMOD_LALT, SDLK_x, force_exit_cb ); + hotkey_add( 0, 0, console_keyboard_handler_cb ); + + gr_new_object( -2147483647L - 1, console_info, console_draw, 0 ); + } +} + +/* --------------------------------------------------------------------------- */ +/* +void __bgdexport( mod_debug, module_finalize )() +{ +} +*/ +/* --------------------------------------------------------------------------- */ +/* exports */ +/* --------------------------------------------------------------------------- */ + +#include "mod_debug_exports.h" + +/* --------------------------------------------------------------------------- */ diff --git a/modules/mod_debug/mod_debug_exports.h b/modules/mod_debug/mod_debug_exports.h new file mode 100644 index 0000000..51a02c7 --- /dev/null +++ b/modules/mod_debug/mod_debug_exports.h @@ -0,0 +1,58 @@ +/* + * Copyright © 2006-2013 SplinterGU (Fenix/Bennugd) + * Copyright © 2002-2006 Fenix Team (Fenix) + * Copyright © 1999-2002 José Luis Cebrián Pagüe (Fenix) + * + * This file is part of Bennu - Game Development + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + * + */ + + +#ifndef __MOD_DEBUG_EXPORTS +#define __MOD_DEBUG_EXPORTS + +/* ----------------------------------------------------------------- */ + +#include "bgddl.h" + +/* ----------------------------------------------------------------- */ + +char * __bgdexport( mod_debug, modules_dependency )[] = +{ + "libkey", + "librender", + NULL +}; + +/* ----------------------------------------------------------------- */ +/* Functions declaration */ + +DLSYSFUNCS __bgdexport( mod_debug, functions_exports)[] = +{ + FUNC( "TRACE" , "I" , TYPE_INT , moddebug_trace ), + + FUNC( 0 , 0 , 0 , 0 ) +}; + +/* ----------------------------------------------------------------- */ + +#endif diff --git a/modules/mod_debug/systexts.c b/modules/mod_debug/systexts.c new file mode 100644 index 0000000..5985c45 --- /dev/null +++ b/modules/mod_debug/systexts.c @@ -0,0 +1,1128 @@ +/* + * Copyright © 2006-2016 SplinterGU (Fenix/Bennugd) + * Copyright © 2002-2006 Fenix Team (Fenix) + * Copyright © 1999-2002 José Luis Cebrián Pagüe (Fenix) + * + * This file is part of Bennu - Game Development + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + * + */ + +/* --------------------------------------------------------------------------- */ + +#include +#include +#include +#include + +#include "bgdcore.h" +#include "bgdrtm.h" + +#include "dcb.h" + +#include "libgrbase.h" + +/* --------------------------------------------------------------------------- */ + +#define CHARWIDTH 6 + +/* --------------------------------------------------------------------------- */ + +static char sysfont[][8][16] = +{ + { + { " " }, + { " " }, + { " " }, + { " " }, + { " " }, + { " " }, + { " " }, + { " " } + }, { + { " XXX " }, + { "X X " }, + { "X X " }, + { "XXXXX " }, + { "X X " }, + { "X X " }, + { "X X " }, + { " " } + }, { + { "XXXX " }, + { "X X " }, + { "X X " }, + { "XXXX " }, + { "X X " }, + { "X X " }, + { "XXXX " }, + { " " } + }, { + { " XXX " }, + { "X X " }, + { "X " }, + { "X " }, + { "X " }, + { "X X " }, + { " XXX " }, + { " " } + }, { + { "XXXX " }, + { "X X " }, + { "X X " }, + { "X X " }, + { "X X " }, + { "X X " }, + { "XXXX " }, + { " " } + }, { + { "XXXXX " }, + { "X " }, + { "X " }, + { "XXXX " }, + { "X " }, + { "X " }, + { "XXXXX " }, + { " " } + }, { + { "XXXXX " }, + { "X " }, + { "X " }, + { "XXXX " }, + { "X " }, + { "X " }, + { "X " }, + { " " } + }, { + { " XXX " }, + { "X X " }, + { "X " }, + { "X XX " }, + { "X X " }, + { "X X " }, + { " XXX " }, + { " " } + }, { + { "X X " }, + { "X X " }, + { "X X " }, + { "XXXXX " }, + { "X X " }, + { "X X " }, + { "X X " }, + { " " } + }, { + { "XXXXX " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { "XXXXX " }, + { " " } + }, { + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { "X X " }, + { " XXX " }, + { " " } + }, { + { "X X " }, + { "X X " }, + { "X X " }, + { "XX " }, + { "X X " }, + { "X X " }, + { "X X " }, + { " " } + }, { + { "X " }, + { "X " }, + { "X " }, + { "X " }, + { "X " }, + { "X " }, + { "XXXXX " }, + { " " } + }, { + { "X X " }, + { "XX XX " }, + { "X X X " }, + { "X X " }, + { "X X " }, + { "X X " }, + { "X X " }, + { " " } + }, { + { "XX X " }, + { "XX X " }, + { "X X X " }, + { "X X X " }, + { "X X X " }, + { "X XX " }, + { "X XX " }, + { " " } + }, { + { " XXX " }, + { "X X " }, + { "X X " }, + { "X X " }, + { "X X " }, + { "X X " }, + { " XXX " }, + { " " } + }, { + { "XXXX " }, + { "X X " }, + { "X X " }, + { "XXXX " }, + { "X " }, + { "X " }, + { "X " }, + { " " } + }, { + { " XXX " }, + { "X X " }, + { "X X " }, + { "X X " }, + { "X X X " }, + { "XX X " }, + { " XXX " }, + { " " } + }, { + { "XXXX " }, + { "X X " }, + { "X X " }, + { "XXXX " }, + { "X X " }, + { "X X " }, + { "X X " }, + { " " } + }, { + { " XXX " }, + { "X X " }, + { "X " }, + { " XXX " }, + { " X " }, + { "X X " }, + { " XXX " }, + { " " } + }, { + { "XXXXX " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " " } + }, { + { "X X " }, + { "X X " }, + { "X X " }, + { "X X " }, + { "X X " }, + { "X 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 " }, + { " " } + }, { + { "XXXXX " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { "X " }, + { "XXXXX " }, + { " " } + }, { + { " XXX " }, + { "X X " }, + { "X X " }, + { "X X " }, + { "X X " }, + { "X X " }, + { " XXX " }, + { " " } + }, { + { " X " }, + { " XX " }, + { "X X " }, + { " X " }, + { " X " }, + { " X " }, + { "XXXXX " }, + { " " } + }, { + { " XXX " }, + { "X X " }, + { " X " }, + { " XX " }, + { " X " }, + { "X " }, + { "XXXXX " }, + { " " } + }, { + { " XXX " }, + { "X X " }, + { " X " }, + { " XXX " }, + { " X " }, + { "X X " }, + { " XXX " }, + { " " } + }, { + { " X " }, + { "X X " }, + { "X X " }, + { "XXXXX " }, + { " X " }, + { " X " }, + { " X " }, + { " " } + }, { + { "XXXXX " }, + { "X " }, + { "XXXX " }, + { " X " }, + { " X " }, + { " X " }, + { "XXXX " }, + { " " } + }, { + { " XXX " }, + { "X " }, + { "XXXX " }, + { "X X " }, + { "X X " }, + { "X X " }, + { " XXX " }, + { " " } + }, { + { "XXXXX " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { "X " }, + { "X " }, + { " " } + }, { + { " XXX " }, + { "X X " }, + { "X X " }, + { " XXX " }, + { "X X " }, + { "X X " }, + { " XXX " }, + { " " } + }, { + { " XXX " }, + { "X X " }, + { "X X " }, + { "X X " }, + { " XXXX " }, + { " X " }, + { " XXX " }, + { " " } + }, { + { " " }, + { " " }, + { " " }, + { " " }, + { " " }, + { " " }, + { " XX " }, + { " " } + }, { + { " " }, + { " " }, + { " XX " }, + { " " }, + { " " }, + { " XX " }, + { " " }, + { " " } + }, { + { " " }, + { " " }, + { " " }, + { " " }, + { " XX " }, + { " " }, + { " XX " }, + { " XX " } + }, { + { " " }, + { " " }, + { " " }, + { " XXXX " }, + { " " }, + { " XXXX " }, + { " " }, + { " " } + }, { + { "XX " }, + { "X X " }, + { " X " }, + { " X " }, + { " X " }, + { "X X " }, + { " XX " }, + { " " } + }, { + { " " }, + { " " }, + { " XXX " }, + { " X " }, + { " XXXX " }, + { "X X " }, + { " XXXX " }, + { " " } + }, { + { "X " }, + { "X " }, + { "XXXX " }, + { "X X " }, + { "X X " }, + { "X X " }, + { "XXXX " }, + { " " } + }, { + { " " }, + { " " }, + { " XXX " }, + { "X X " }, + { "X " }, + { "X X " }, + { " XXX " }, + { " " } + }, { + { " X " }, + { " X " }, + { " XXXX " }, + { "X X " }, + { "X X " }, + { "X X " }, + { " XXXX " }, + { " " } + }, { + { " " }, + { " " }, + { " XXX " }, + { "X X " }, + { "XXXX " }, + { "X " }, + { " XXXX " }, + { " " } + }, { + { " XXX " }, + { "X X " }, + { "X " }, + { "XXX " }, + { "X " }, + { "X " }, + { "X " }, + { " " } + }, { + { " " }, + { " " }, + { " XXXX " }, + { "X X " }, + { "X X " }, + { " XXXX " }, + { " X " }, + { " XXX " } + }, { + { "X " }, + { "X " }, + { "XXXX " }, + { "X X " }, + { "X X " }, + { "X X " }, + { "X X " }, + { " " } + }, { + { " " }, + { " X " }, + { " " }, + { " XX " }, + { " X " }, + { " X " }, + { " XXX " }, + { " " } + }, { + { " " }, + { " X " }, + { " " }, + { " XXX " }, + { " X " }, + { " X " }, + { "X X " }, + { " XXX " } + }, { + { "X " }, + { "X " }, + { "X " }, + { "X X " }, + { "XXX " }, + { "X X " }, + { "X X " }, + { " " } + }, { + { " XX " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { "XXXXX " }, + { " " } + }, { + { " " }, + { " " }, + { "XX X " }, + { "X X X " }, + { "X X X " }, + { "X X X " }, + { "X X X " }, + { " " } + }, { + { " " }, + { " " }, + { "XXXX " }, + { "X X " }, + { "X X " }, + { "X X " }, + { "X X " }, + { " " } + }, { + { " " }, + { " " }, + { " XXX " }, + { "X X " }, + { "X X " }, + { "X X " }, + { " XXX " }, + { " " } + }, { + { " " }, + { " " }, + { "XXXX " }, + { "X X " }, + { "X X " }, + { "XXXX " }, + { "X " }, + { "X " } + }, { + { " " }, + { " " }, + { " XXXX " }, + { "X X " }, + { "X X " }, + { " XXXX " }, + { " X " }, + { " X " } + }, { + { " " }, + { " " }, + { "X XX " }, + { "XX X " }, + { "X " }, + { "X " }, + { "X " }, + { " " } + }, { + { " " }, + { " " }, + { " XXX " }, + { "X " }, + { " XXX " }, + { " X " }, + { "XXXX " }, + { " " } + }, { + { " X " }, + { " X " }, + { "XXXX " }, + { " X " }, + { " X " }, + { " X X " }, + { " XX " }, + { " " } + }, { + { " " }, + { " " }, + { "X X " }, + { "X X " }, + { "X X " }, + { "X 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 " }, + { " XXXX " }, + { " X " }, + { "XXXX " } + }, { + { " " }, + { " " }, + { "XXXXX " }, + { " X " }, + { " X " }, + { " X " }, + { "XXXXX " }, + { " " } + }, { + { " XXX " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " XXX " }, + { " " } + }, { + { " XXX " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " XXX " }, + { " " } + }, { + { " XX " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " XX " }, + { " " } + }, { + { " XX " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " XX " }, + { " " } + }, { + { " XX " }, + { " X " }, + { " X " }, + { "X " }, + { " X " }, + { " X " }, + { " XX " }, + { " " } + }, { + { " XX " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " XX " }, + { " " } + }, { + { " " }, + { " " }, + { " " }, + { " " }, + { "XXXXX " }, + { " " }, + { " " }, + { " " } + }, { + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " " } + }, { + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " " } + }, { + { " " }, + { " " }, + { " " }, + { " " }, + { " " }, + { " " }, + { "XXXXX " }, + { " " } + }, { + { " " }, + { " " }, + { " " }, + { " " }, + { " " }, + { " " }, + { " X " }, + { " XX " } + }, { + { " " }, + { "X " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " X" }, + { " " } + }, { + { " " }, + { " X" }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { "X " }, + { " " } + }, { + { " " }, + { " " }, + { " X " }, + { " X " }, + { "XXXXX " }, + { " X " }, + { " X " }, + { " " } + }, { + { " " }, + { " X X " }, + { " X " }, + { "XXXXX " }, + { " X " }, + { " X X " }, + { " " }, + { " " } + }, { + { " " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " " }, + { " X " }, + { " " } + }, { + { " " }, + { " X " }, + { " " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " " } + }, { + { " " }, + { " XXX " }, + { "X X " }, + { " X " }, + { " X " }, + { " " }, + { " X " }, + { " " } + }, { + { " " }, + { " X " }, + { " " }, + { " X " }, + { " X " }, + { "X X " }, + { " XXX " }, + { " " } + }, { + { " X X " }, + { " X X " }, + { " " }, + { " " }, + { " " }, + { " " }, + { " " }, + { " " } + }, { + { " X " }, + { " X " }, + { " " }, + { " " }, + { " " }, + { " " }, + { " " }, + { " " } + }, { + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " XXXX" }, + { " X " }, + { " X " }, + { " X " } + }, { + { " " }, + { " " }, + { " " }, + { " " }, + { "XXXXXX" }, + { " " }, + { " " }, + { " " } + }, { + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " X " }, + { " X " } + }, { + { " X " }, + { " X " }, + { " XXX " }, + { "X X " }, + { "XXXXX " }, + { "X X " }, + { "X X " }, + { " " } + }, { + { " X " }, + { " X " }, + { "XXXXX " }, + { "X " }, + { "XXXX " }, + { "X " }, + { "XXXXX " }, + { " " } + }, { + { " X " }, + { " X " }, + { "XXXXX " }, + { " X " }, + { " X " }, + { " X " }, + { "XXXXX " }, + { " " } + }, { + { " X " }, + { " X " }, + { " XXX " }, + { "X X " }, + { "X X " }, + { "X X " }, + { " XXX " }, + { " " } + }, { + { " X " }, + { " X " }, + { "X X " }, + { "X X " }, + { "X X " }, + { "X X " }, + { " XXX " }, + { " " } + }, { + { " XXX " }, + { " " }, + { "XX X " }, + { "XX X " }, + { "X X X " }, + { "X XX " }, + { "X XX " }, + { " " } + }, { + { " X " }, + { " X " }, + { " XXX " }, + { " X " }, + { " XXXX " }, + { "X X " }, + { " XXXX " }, + { " " } + }, { + { " X " }, + { " X " }, + { " XXX " }, + { "X X " }, + { "XXXX " }, + { "X " }, + { " XXXX " }, + { " " } + }, { + { " X " }, + { " X " }, + { " " }, + { " XX " }, + { " X " }, + { " X " }, + { " XXX " }, + { " " } + }, { + { " X " }, + { " X " }, + { " XXX " }, + { "X X " }, + { "X X " }, + { "X X " }, + { " XXX " }, + { " " } + }, { + { " X " }, + { " X " }, + { "X X " }, + { "X X " }, + { "X X " }, + { "X X " }, + { " XXX " }, + { " " } + }, { + { "XXXX " }, + { " " }, + { "XXXX " }, + { "X X " }, + { "X X " }, + { "X X " }, + { "X X " }, + { " " } + } +}; + +/* --------------------------------------------------------------------------- */ + +void systext_color( int cfg, int cbg ); +void systext_puts( GRAPH * map, int x, int y, char * str, int len ); + +/* --------------------------------------------------------------------------- */ + +static uint8_t * letters = " ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.:;=%abcdefghijklmnopqrstuvwxyz[](){}-><_,\\/+*!¡?¿\"'\x01\x02\x03ÁÉÍÓÚÑáéíóúñ" ; + +static int fg = 0, bg = 0; + +/* --------------------------------------------------------------------------- */ + +void systext_putchar( GRAPH * map, int ox, int oy, uint8_t c ) +{ + int x, y ; + static int corr[256] ; + static int corr_init = 0 ; + + if ( !corr_init ) + { + uint8_t * ptr ; + + for ( ptr = letters; *ptr; ptr++ ) + corr[*ptr] = corr_init++ ; + } + +#define PUTSYS(TYPE) \ + for (y = oy ; y < oy+8 ; y++) \ + { \ + TYPE * ptr; uint8_t * cptr ; \ + if (y < 0 || y >= (int)map->height) continue ; \ + ptr = (TYPE *)((uint8_t*)map->data + map->pitch*y) ; \ + ptr += ox; \ + cptr = (uint8_t*)sysfont[c][y-oy]; \ + for (x = ox ; x < ox+6 ; x++, cptr++) \ + { \ + if (x < 0 || x >= (int)map->width) \ + { \ + ptr++ ; \ + continue ; \ + } \ + if (*cptr == 'X') \ + *ptr++ = fg ; \ + else \ + if (bg) \ + *ptr++ = bg ; \ + else \ + ptr++ ; \ + } \ + } + + switch ( map->format->depth ) + { + case 8 : + { + c = corr[c] ; + PUTSYS( uint8_t ) + } + break; + case 16 : + { + c = corr[c] ; + PUTSYS( uint16_t ) + } + break; + case 32 : + { + c = corr[c] ; + PUTSYS( uint32_t ) + } + } + +#undef PUTSYS +} + +/* --------------------------------------------------------------------------- */ + +static int text_colors[] = +{ + 0x000000, 0x0000C0, 0xC00000, 0xC000C0, 0x00C000, 0x00C0C0, 0xC0C000, 0xC0C0C0, + 0x808080, 0x0000FF, 0xFF0000, 0xFF00FF, 0x00FF00, 0x00FFFF, 0xFFFF00, 0xFFFFFF +} ; + +/* --------------------------------------------------------------------------- */ + +void systext_puts( GRAPH * map, int x, int y, char * str, int len ) +{ + while ( *str && len ) + { + if ( *str == '¬' ) + { + uint8_t color = 0 ; + str++ ; + if ( isdigit( *str ) ) color = *str++ - '0' ; + if ( isdigit( *str ) ) color = color * 10 + *str++ - '0' ; + + if ( color < 32 ) + { + if ( color > 15 ) + systext_color( -1, text_colors[color - 16] ) ; + else + systext_color( text_colors[color], -1 ) ; + } + if ( !*str ) break ; + continue; + } + systext_putchar( map, x, y, *str++ ) ; + x += CHARWIDTH ; + len--; + } + + while ( len-- > 0 ) + { + systext_putchar( map, x, y, ' ' ) ; + x += CHARWIDTH ; + } +} + +/* --------------------------------------------------------------------------- */ + +void systext_color( int cfg, int cbg ) +{ + if ( !cbg ) bg = 0; + if ( sys_pixel_format->depth == 8 ) + { + if ( !trans_table_updated ) gr_make_trans_table() ; + + fg = gr_find_nearest_color((( cfg & 0xFF0000 ) >> 16 ), (( cfg & 0x00FF00 ) >> 8 ), ( cfg & 0x0000FF ) ) ; + if ( cbg > 0 ) bg = gr_find_nearest_color((( cbg & 0xFF0000 ) >> 16 ), (( cbg & 0x00FF00 ) >> 8 ), ( cbg & 0x0000FF ) ) ; + } + else + { + fg = gr_rgb((( cfg & 0xFF0000 ) >> 16 ), (( cfg & 0x00FF00 ) >> 8 ), ( cfg & 0x0000FF ) ) ; + if ( cbg > 0 ) bg = gr_rgb((( cbg & 0xFF0000 ) >> 16 ), (( cbg & 0x00FF00 ) >> 8 ), ( cbg & 0x0000FF ) ) ; + } +} + +/* --------------------------------------------------------------------------- */ -- cgit v1.2.3