From 4c9c3bea16e8a05c1d4a085884bca8a0135143c0 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Sun, 14 Dec 2014 18:26:36 -0600 Subject: Traveler: Add the first of several game-related tools --- apps/graphics/traveler/include/trv_types.h | 6 +- apps/graphics/traveler/tools/.gitignore | 3 + apps/graphics/traveler/tools/Makefile.host | 104 +++++++++++++++ apps/graphics/traveler/tools/misc/pll2txt.c | 196 ++++++++++++++++++++++++++++ 4 files changed, 307 insertions(+), 2 deletions(-) create mode 100644 apps/graphics/traveler/tools/.gitignore create mode 100644 apps/graphics/traveler/tools/Makefile.host create mode 100644 apps/graphics/traveler/tools/misc/pll2txt.c diff --git a/apps/graphics/traveler/include/trv_types.h b/apps/graphics/traveler/include/trv_types.h index 3a5fb4247..3e25a7158 100644 --- a/apps/graphics/traveler/include/trv_types.h +++ b/apps/graphics/traveler/include/trv_types.h @@ -40,8 +40,10 @@ * Included Files ****************************************************************************/ -#include -#include +#ifndef __HOST_BUILD__ +# include +# include +#endif #include #include diff --git a/apps/graphics/traveler/tools/.gitignore b/apps/graphics/traveler/tools/.gitignore new file mode 100644 index 000000000..2fb541fc0 --- /dev/null +++ b/apps/graphics/traveler/tools/.gitignore @@ -0,0 +1,3 @@ +/pll2txt +/*.exe +/*.dSYM diff --git a/apps/graphics/traveler/tools/Makefile.host b/apps/graphics/traveler/tools/Makefile.host new file mode 100644 index 000000000..862d638c8 --- /dev/null +++ b/apps/graphics/traveler/tools/Makefile.host @@ -0,0 +1,104 @@ +############################################################################ +# apps/graphics/traveler/tools/Makefile.host +# +# Copyright (C) 2014 Gregory Nutt. All rights reserved. +# Author: Gregory Nutt +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. Neither the name NuttX nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +############################################################################ + +-include $(TOPDIR)/Make.defs +include ${TOPDIR}/tools/Config.mk + +# Directories + +TRAVELER_DIR = $(APPDIR)/graphics/traveler +TRAVELER_INC = $(TRAVELER_DIR)/include + +VPATH = misc + +# Tools + +ifeq ($(CONFIG_WINDOWS_NATIVE),y) + +# In the Windows native environment, the MinGW GCC compiler is assumed + +HOSTCC ?= mingw-gcc.exe +HOSTCFLAGS ?= -O2 -Wall -Wstrict-prototypes -Wshadow +HOSTCFLAGS += -I. ${shell $(INCDIR) -w "$(HOSTCC)" $(TRAVELER_INC)} -D__HOST_BUILD__ -DWINDOWS_NATIVE=y + +else + +# GCC is assumed in the POSIX environment. +# strtok_r is used in some tools, but does not seem to be available in +# the MinGW environment. + +HOSTCC ?= gcc +HOSTCFLAGS ?= -O2 -Wall -Wstrict-prototypes -Wshadow +HOSTCFLAGS += -I. -I $(TRAVELER_INC) -D__HOST_BUILD__ -DHAVE_STRTOK_C + +endif + +# Files + +PLL2TXT_SRCS = pll2txt.c +PLL2TXT_OBJS = $(PLL2TXT_SRCS:.c=$(OBJEXT)) + +OBJS = $(PLL2TXT_OBJS) + +# Targets + +all: pll2txt$(HOSTEXEEXT) + +default: all + +ifdef HOSTEXEEXT +.PHONY: pll2txt clean +else +.PHONY: clean +endif + +$(OBJS): %$(OBJEXT): %.c + $(Q) $(HOSTCC) -c $(HOSTCFLAGS) $< -o $@ + +# pll2txt - Convert world plane file to a text file + +pll2txt$(HOSTEXEEXT): $(PLL2TXT_OBJS) + $(Q) $(HOSTCC) $(HOSTCFLAGS) $< -o $@ + +ifdef HOSTEXEEXT +pll2txt: pll2txt$(HOSTEXEEXT) +endif + +clean: + $(call DELFILE, pll2txt$(HOSTEXEEXT)) +ifneq ($(CONFIG_WINDOWS_NATIVE),y) + $(Q) rm -rf *.dSYM +endif + $(call CLEAN) diff --git a/apps/graphics/traveler/tools/misc/pll2txt.c b/apps/graphics/traveler/tools/misc/pll2txt.c new file mode 100644 index 000000000..76da566a8 --- /dev/null +++ b/apps/graphics/traveler/tools/misc/pll2txt.c @@ -0,0 +1,196 @@ +/******************************************************************************* + * apps/graphics/traveler/tools/misc/pll2txt.c + * This file contains low-level texture bitmap logic + * + * Copyright (C) 2014 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/**************************************************************************** + * Included files + ****************************************************************************/ + +#define FAR + +#include "trv_types.h" +#include "trv_plane.h" + +#include +#include +#include + +/**************************************************************************** + * Private Data + ****************************************************************************/ + +static bool b_use_hex = false; + +/**************************************************************************** + * Private Functions + ****************************************************************************/ + +static int dump_plane(FILE *instream, FILE *outstream, int nrects) +{ + struct trv_rect_data_s rect; + int i; + + for (i = 1; i <= nrects; i++) + { + if (fread((char*)&rect, RESIZEOF_TRVRECTDATA_T, 1, instream) != 1) + { + fprintf(stderr, "ERROR: Read failure\n"); + return -1; + } + + if (b_use_hex) + { + fprintf(outstream, "%04x %04x %04x %04x %04x %02x %02x %02x\n", + rect.plane, rect.hstart, rect.hend, rect.vstart, rect.vend, + rect.attribute, rect.texture, rect.scale); + } + else + { + fprintf(outstream, "%5d %5d %5d %5d %5d %02x %2d %d\n", + rect.plane, rect.hstart, rect.hend, rect.vstart, rect.vend, + rect.attribute, rect.texture, rect.scale); + } + } + + return 0; +} + +static void show_usage(const char *progname) +{ + fprintf(stderr,"Usage: %s [-h] [-o outfilename] [infile]\n", + progname); + exit(EXIT_FAILURE); +} + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +int main(int argc, char **argv, char **envp) +{ + char *infile = "transfrm.pll"; + char *outfile = NULL; + struct trv_planefile_header_s header; + int option; + FILE *instream; + FILE *outstream = stdout; + + while ((option = getopt(argc, argv, "ho:")) != EOF) + { + switch (option) + { + case 'h' : + b_use_hex = true; + break; + + case 'o' : + outfile = optarg; + break; + + default: + fprintf(stderr, "ERROR: Unrecognized option: %c\n", option); + show_usage(argv[0]); + break; + } + } + + /* We expect at least one argument after the options: The input + * file name. + */ + + if (optind == argc - 1) + { + infile = argv[optind]; + } + else if (optind < argc - 1) + { + fprintf(stderr, "ERROR: Unexpected garbage after [infile]\n"); + show_usage(argv[0]); + } + + instream = fopen(infile, "rb"); + if (!instream) + { + fprintf(stderr, "ERROR: Unable to open %s\n", infile); + return EXIT_FAILURE; + } + + printf("Reading plane file: %s\n", infile); + + if (outfile) + { + outstream = fopen(outfile, "w"); + if (!outstream) + { + fprintf(stderr, "ERROR: Unable to open %s\n", outfile); + return EXIT_FAILURE; + } + + printf("Generating text file: %s\n", outfile); + } + + if (fread((char*)&header, SIZEOF_TRVPLANEFILEHEADER_T, 1, instream) != 1) + { + fprintf(stderr, "Unable to Read %s header\n", infile); + return EXIT_FAILURE; + } + + fprintf(outstream, "nxrects=%d, nyrects=%d, nzrects=%d\n", + header.nxrects, header.nyrects, header.nzrects ); + + fprintf(outstream, "X Planes: \n"); + if (dump_plane(instream, outstream, header.nxrects)) + { + goto stop_dump; + } + + fprintf(outstream, "Y Planes: \n"); + if (dump_plane(instream, outstream, header.nyrects)) + { + goto stop_dump; + } + + fprintf(outstream, "Z Planes: \n"); + dump_plane(instream, outstream, header.nzrects); + +stop_dump: + fclose(instream); + if (outfile) + { + fclose(outstream); + } + + return EXIT_SUCCESS; +} -- cgit v1.2.3