From 3a9d29d5e29b64a86bfeb9b00a7ce8b038a2c92f Mon Sep 17 00:00:00 2001 From: uz Date: Fri, 30 Oct 2009 21:34:40 +0000 Subject: [PATCH] Created the skeleton of the vector font converter. git-svn-id: svn://svn.cc65.org/cc65/trunk@4405 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- src/chrcvt/error.c | 90 +++++++++++++++++ src/chrcvt/error.h | 68 +++++++++++++ src/chrcvt/main.c | 193 +++++++++++++++++++++++++++++++++++++ src/chrcvt/make/gcc.mak | 62 ++++++++++++ src/chrcvt/make/watcom.mak | 98 +++++++++++++++++++ 5 files changed, 511 insertions(+) create mode 100644 src/chrcvt/error.c create mode 100644 src/chrcvt/error.h create mode 100644 src/chrcvt/main.c create mode 100644 src/chrcvt/make/gcc.mak create mode 100644 src/chrcvt/make/watcom.mak diff --git a/src/chrcvt/error.c b/src/chrcvt/error.c new file mode 100644 index 000000000..310688f07 --- /dev/null +++ b/src/chrcvt/error.c @@ -0,0 +1,90 @@ +/*****************************************************************************/ +/* */ +/* error.c */ +/* */ +/* Error handling for the chrcvt vector font converter */ +/* */ +/* */ +/* */ +/* (C) 1998-2009, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed 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 "error.h" + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +void Warning (const char* Format, ...) +/* Print a warning message */ +{ + va_list ap; + va_start (ap, Format); + fprintf (stderr, "Warning: "); + vfprintf (stderr, Format, ap); + putc ('\n', stderr); + va_end (ap); +} + + + +void Error (const char* Format, ...) +/* Print an error message and die */ +{ + va_list ap; + va_start (ap, Format); + fprintf (stderr, "Error: "); + vfprintf (stderr, Format, ap); + putc ('\n', stderr); + va_end (ap); + exit (EXIT_FAILURE); +} + + + +void Internal (const char* Format, ...) +/* Print an internal error message and die */ +{ + va_list ap; + va_start (ap, Format); + fprintf (stderr, "Internal error: "); + vfprintf (stderr, Format, ap); + putc ('\n', stderr); + va_end (ap); + exit (EXIT_FAILURE); +} + + + diff --git a/src/chrcvt/error.h b/src/chrcvt/error.h new file mode 100644 index 000000000..de1390bfc --- /dev/null +++ b/src/chrcvt/error.h @@ -0,0 +1,68 @@ +/*****************************************************************************/ +/* */ +/* error.h */ +/* */ +/* Error handling for the chrcvt vector font converter */ +/* */ +/* */ +/* */ +/* (C) 1998-2009, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed 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 ERROR_H +#define ERROR_H + + + +/* common */ +#include "attrib.h" + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +void Warning (const char* Format, ...) attribute((format(printf,1,2))); +/* Print a warning message */ + +void Error (const char* Format, ...) attribute((noreturn, format(printf,1,2))); +/* Print an error message and die */ + +void Internal (const char* Format, ...) attribute((noreturn, format(printf,1,2))); +/* Print an internal error message and die */ + + + +/* End of error.h */ + +#endif + + + diff --git a/src/chrcvt/main.c b/src/chrcvt/main.c new file mode 100644 index 000000000..759c23385 --- /dev/null +++ b/src/chrcvt/main.c @@ -0,0 +1,193 @@ +/*****************************************************************************/ +/* */ +/* main.c */ +/* */ +/* Main program of the chrcvt vector font converter */ +/* */ +/* */ +/* */ +/* (C) 2000-2009, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed 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 + +/* common */ +#include "cmdline.h" +#include "version.h" + +/* chrcvt */ +#include "error.h" + + + +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +static unsigned FilesProcessed = 0; + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +static void Usage (void) +/* Print usage information and exit */ +{ + fprintf (stderr, + "Usage: %s [options] file [options] [file]\n" + "Short options:\n" + " -h\t\t\tHelp (this text)\n" + " -H\t\t\tDump the object file header\n" + " -S\t\t\tDump segments sizes\n" + " -V\t\t\tPrint the version number and exit\n" + "\n" + "Long options:\n" + " --dump-all\t\tDump all object file information\n" + " --dump-dbgsyms\tDump debug symbols\n" + " --dump-exports\tDump exported symbols\n" + " --dump-files\t\tDump the source files\n" + " --dump-header\t\tDump the object file header\n" + " --dump-imports\tDump imported symbols\n" + " --dump-lineinfo\tDump line information\n" + " --dump-options\tDump object file options\n" + " --dump-segments\tDump the segments in the file\n" + " --dump-segsize\tDump segments sizes\n" + " --help\t\tHelp (this text)\n" + " --version\t\tPrint the version number and exit\n", + ProgName); +} + + + +static void OptHelp (const char* Opt attribute ((unused)), + const char* Arg attribute ((unused))) +/* Print usage information and exit */ +{ + Usage (); + exit (EXIT_SUCCESS); +} + + + +static void OptVersion (const char* Opt attribute ((unused)), + const char* Arg attribute ((unused))) +/* Print the assembler version */ +{ + fprintf (stderr, + "%s V%s - (C) Copyright 2009, Ullrich von Bassewitz\n", + ProgName, GetVersionAsString ()); +} + + + +static void ConvertFile (const char* Name) +/* Convert one vector font file */ +{ + /* Try to open the file */ + FILE* F = fopen (Name, "rb"); + if (F == 0) { + Error ("Cannot open `%s': %s", Name, strerror (errno)); + } + + /* Close the file */ + fclose (F); +} + + + +int main (int argc, char* argv []) +/* Assembler main program */ +{ + /* Program long options */ + static const LongOpt OptTab[] = { + { "--help", 0, OptHelp }, + { "--version", 0, OptVersion }, + }; + + unsigned I; + + /* Initialize the cmdline module */ + InitCmdLine (&argc, &argv, "chrcvt"); + + /* Check the parameters */ + I = 1; + while (I < ArgCount) { + + /* Get the argument */ + const char* Arg = ArgVec[I]; + + /* Check for an option */ + if (Arg [0] == '-') { + switch (Arg [1]) { + + case '-': + LongOption (&I, OptTab, sizeof(OptTab)/sizeof(OptTab[0])); + break; + + case 'h': + OptHelp (Arg, 0); + break; + + case 'V': + OptVersion (Arg, 0); + break; + + default: + UnknownOption (Arg); + break; + + } + } else { + /* Filename. Dump it. */ + ConvertFile (Arg); + ++FilesProcessed; + } + + /* Next argument */ + ++I; + } + + /* Print a message if we did not process any files */ + if (FilesProcessed == 0) { + fprintf (stderr, "%s: No input files\n", ProgName); + } + + /* Success */ + return EXIT_SUCCESS; +} + + + diff --git a/src/chrcvt/make/gcc.mak b/src/chrcvt/make/gcc.mak new file mode 100644 index 000000000..e08eb0d7f --- /dev/null +++ b/src/chrcvt/make/gcc.mak @@ -0,0 +1,62 @@ +# +# Makefile for the chrcvt vector font converter +# + + +# ------------------------------------------------------------------------------ + +# The executable to build +EXE = chrcvt + +# Library dir +COMMON = ../common + +# +CC = gcc +CFLAGS = -O2 -g -Wall -W -std=c89 +override CFLAGS += -I$(COMMON) +EBIND = emxbind +LDFLAGS = + + +# ----------------------------------------------------------------------------- +# List of all object files + +OBJS = error.o \ + main.o + +LIBS = $(COMMON)/common.a + +# ------------------------------------------------------------------------------ +# Makefile targets + +# Main target - must be first +.PHONY: all +ifeq (.depend,$(wildcard .depend)) +all: $(EXE) +include .depend +else +all: depend + @$(MAKE) -f make/gcc.mak all +endif + +$(EXE): $(OBJS) $(LIBS) + $(CC) $^ $(LDFLAGS) -o $@ + @if [ $(OS2_SHELL) ] ; then $(EBIND) $(EXE) ; fi + +clean: + $(RM) *~ core.* *.map + +zap: clean + $(RM) *.o $(EXE) .depend + +# ------------------------------------------------------------------------------ +# Make the dependencies + +.PHONY: depend dep +depend dep: $(OBJS:.o=.c) + @echo "Creating dependency information" + $(CC) $(CFLAGS) -MM $^ > .depend + + + diff --git a/src/chrcvt/make/watcom.mak b/src/chrcvt/make/watcom.mak new file mode 100644 index 000000000..1704539cb --- /dev/null +++ b/src/chrcvt/make/watcom.mak @@ -0,0 +1,98 @@ +# +# chrcvt Makefile for the Watcom compiler (using GNU make) +# + +# ------------------------------------------------------------------------------ +# Generic stuff + +# Environment variables for the watcom compiler +export WATCOM = c:\\watcom +export INCLUDE = $(WATCOM)\\h + +# We will use the windows compiler under linux (define as empty for windows) +export WINEDEBUG=fixme-all +WINE = wine + +# Programs +AR = $(WINE) wlib +CC = $(WINE) wcc386 +LD = $(WINE) wlink +WSTRIP = $(WINE) wstrip -q + +LNKCFG = ld.tmp + +# Program arguments +CFLAGS = -d1 -obeilr -zp4 -5 -zq -w2 -i=..\\common + +# Target files +EXE = chrcvt.exe + +# Create NT programs by default +ifndef TARGET +TARGET = NT +endif + +# --------------------- OS2 --------------------- +ifeq ($(TARGET),OS2) +SYSTEM = os2v2 +CFLAGS += -bt=$(TARGET) +endif + +# -------------------- DOS4G -------------------- +ifeq ($(TARGET),DOS32) +SYSTEM = dos4g +CFLAGS += -bt=$(TARGET) +endif + +# --------------------- NT ---------------------- +ifeq ($(TARGET),NT) +SYSTEM = nt +CFLAGS += -bt=$(TARGET) +endif + +# ------------------------------------------------------------------------------ +# Implicit rules + +%.obj: %.c + $(CC) $(CFLAGS) -fo=$@ $^ + + +# ------------------------------------------------------------------------------ +# All OBJ files + +OBJS = error.obj \ + main.obj + +LIBS = ../common/common.lib + + +# ------------------------------------------------------------------------------ +# Main targets + +all: $(EXE) + + +# ------------------------------------------------------------------------------ +# Other targets + + +$(EXE): $(OBJS) $(LIBS) + @echo "DEBUG ALL" > $(LNKCFG) + @echo "OPTION QUIET" >> $(LNKCFG) + @echo "OPTION MAP" >> $(LNKCFG) + @echo "OPTION STACK=65536" >> $(LNKCFG) + @echo "NAME $@" >> $(LNKCFG) + @for i in $(OBJS); do echo "FILE $${i}"; done >> $(LNKCFG) + @for i in $(LIBS); do echo "LIBRARY $${i}"; done >> $(LNKCFG) + @$(LD) system $(SYSTEM) @$(LNKCFG) + @rm $(LNKCFG) + +clean: + @rm -f *~ core + +zap: clean + @rm -f $(OBJS) $(EXE) $(EXE:.exe=.map) + +strip: + @-$(WSTRIP) $(EXE) +