Skip to content

Commit

Permalink
A ton of work...slouching towards basic startup functionality.
Browse files Browse the repository at this point in the history
  • Loading branch information
icculus committed Mar 25, 2006
1 parent 63f35f3 commit 14cd764
Show file tree
Hide file tree
Showing 8 changed files with 379 additions and 38 deletions.
8 changes: 7 additions & 1 deletion fileio.h
Expand Up @@ -36,14 +36,20 @@ struct MojoInput
MojoInput *MojoInput_newFromFile(const char *fname);
MojoInput *MojoInput_newFromMemory(void *mem, size_t bytes);

typedef enum
{
MOJOARCHIVE_ENTRY_FILE = 0,
MOJOARCHIVE_ENTRY_DIR,
MOJOARCHIVE_ENTRY_SYMLINK,
} MojoArchiveEntryType;

/* Abstract archive interface. Archives, directories, etc. */
typedef struct MojoArchiveEntryInfo MojoArchiveEntryInfo;
struct MojoArchiveEntryInfo
{
const char *filename;
MojoArchiveEntryType type;
sint64 filesize;
int64 filesize;
};

typedef struct MojoArchive MojoArchive;
Expand Down
34 changes: 31 additions & 3 deletions gui.h
Expand Up @@ -47,12 +47,40 @@ struct MojoGui_rev1
* in places that don't care about backwards compatibility, and can avoid
* the Macro Salsa.
*/
#define MOJOGUI_ENTRY_POINT_VER(v) MojoSetup_GUI_GetInterface_rev##v
#define MOJOGUI_ENTRY_POINT MOJOGUI_ENTRY_POINT_VER(MOJOGUI_INTERFACE_REVISION)
#define MOJOGUI_STRUCT_VER(v) MojoGui_rev##v
#define MOJOGUI_STRUCT MOJOGUI_STRUCT_VER(MOJOGUI_INTERFACE_REVISION)
#define MOJOGUI_STRUCT2(v) MOJOGUI_STRUCT_VER(v)
#define MOJOGUI_STRUCT MOJOGUI_STRUCT2(MOJOGUI_INTERFACE_REVISION)
#define MOJOGUI_ENTRY_POINT_VER(v) MojoSetup_GUI_GetInterface_rev##v
#define MOJOGUI_ENTRY_POINT2(v) MOJOGUI_ENTRY_POINT_VER(v)
#define MOJOGUI_ENTRY_POINT MOJOGUI_ENTRY_POINT2(MOJOGUI_INTERFACE_REVISION)
#define MOJOGUI_ENTRY_POINT_STR3(v) #v
#define MOJOGUI_ENTRY_POINT_STR2(v) MOJOGUI_ENTRY_POINT_STR3(v)
#define MOJOGUI_ENTRY_POINT_STR_VER(v) MOJOGUI_ENTRY_POINT_STR2(MOJOGUI_ENTRY_POINT2(v))
#define MOJOGUI_ENTRY_POINT_STR MOJOGUI_ENTRY_POINT_STR_VER(MOJOGUI_INTERFACE_REVISION)

typedef MOJOGUI_STRUCT MojoGui;

__EXPORT__ MOJOGUI_STRUCT *MOJOGUI_ENTRY_POINT(void);
extern MojoGui *GGui;

/*
* We do this as a macro so we only have to update one place, and it
* enforces some details in the plugins. Without effort, plugins don't
* support anything but the latest version of the interface.
*/
#define CREATE_MOJOGUI_ENTRY_POINT(module) \
MOJOGUI_STRUCT *MOJOGUI_ENTRY_POINT(void) \
{ \
static MOJOGUI_STRUCT retval; \
retval.priority = MojoGui_##module##_priority; \
retval.init = MojoGui_##module##_init; \
retval.deinit = MojoGui_##module##_deinit; \
retval.msgbox = MojoGui_##module##_msgbox; \
retval.promptyn = MojoGui_##module##_promptyn; \
retval.opaque = NULL; \
return &retval; \
} \

#ifdef __cplusplus
}
#endif
Expand Down
49 changes: 49 additions & 0 deletions gui/gui_stdio.c
@@ -0,0 +1,49 @@
#include "../gui.h"
#include <ctype.h>

static uint8 MojoGui_stdio_priority(MojoGui_rev1 *gui)
{
return MOJOGUI_PRIORITY_TRY_LAST;
}

static boolean MojoGui_stdio_init(MojoGui_rev1 *gui)
{
return true;
}

static void MojoGui_stdio_deinit(MojoGui_rev1 *gui)
{
}

static void MojoGui_stdio_msgbox(MojoGui_rev1 *gui, const char *title, const char *text)
{
printf("NOTICE: %s\n[hit enter]", text);
fflush(stdout);
if (!feof(stdin))
getchar();
}

static boolean MojoGui_stdio_promptyn(MojoGui_rev1 *gui, const char *title, const char *text)
{
if (feof(stdin))
return 0;

while (1)
{
int c;
printf("%s\n[y/n]", text);
fflush(stdout);
c = toupper(getchar());
if (c == 'N')
return 0;
else if (c == 'Y')
return 1;
} /* while */

return 0;
}

CREATE_MOJOGUI_ENTRY_POINT(stdio)

/* gui_stdio.c ... */

83 changes: 49 additions & 34 deletions makefile
Expand Up @@ -95,16 +95,6 @@ CC := ccache gcc
CXX := ccache g++
LD := g++

ifeq ($(iswindows),true)
EXEEXT := .exe
endif
#ifeq ($(isunix),true)
# EXEEXT := -bin
#endif

EXE := $(APPID)$(EXEEXT)
EXES := $(EXE)

#OPTS := -O3 -fno-strict-aliasing -falign-loops=16 -ffast-math -fno-math-errno
OPTS := -O0

Expand All @@ -115,22 +105,35 @@ DEFINES := \
INCLUDES := \
-I. \

SRCS := \
mojosetup.c \


ifeq ($(isunix),true)
DEFINES += -DPLATFORM_UNIX=1
SRCS += platform/unix.c
GUIPLUGINS += gui_stdio
endif

ifeq ($(islinux),true)
DEFINES += -DPLATFORM_LINUX=1
EXEEXT := -bin
DLLEXT := .so
SHARED_LDFLAGS += -shared -fPIC
endif

ifeq ($(ismacosx),true)
DEFINES += -DPLATFORM_MACOSX=1
LIBS += -framework Carbon
#OPTS += -mdynamic-no-pic
EXEEXT := -bin
DLLEXT := .dylib
SHARED_LDFLAGS += -dynamiclib -fPIC
endif

ifeq ($(iswindows),true)
DEFINES += -DPLATFORM_WINDOWS=1
EXEEXT := .exe
DLLEXT := .dll
endif

ifeq ($(is32bit),true)
Expand All @@ -150,50 +153,62 @@ else
DEFINES += -DPLATFORM_LITTLEENDIAN=1
endif

ZLIBSRCS := \
$(PHYSFSDIR)/zlib123/adler32.c \
$(PHYSFSDIR)/zlib123/compress.c \
$(PHYSFSDIR)/zlib123/crc32.c \
$(PHYSFSDIR)/zlib123/deflate.c \
$(PHYSFSDIR)/zlib123/gzio.c \
$(PHYSFSDIR)/zlib123/infback.c \
$(PHYSFSDIR)/zlib123/inffast.c \
$(PHYSFSDIR)/zlib123/inflate.c \
$(PHYSFSDIR)/zlib123/inftrees.c \
$(PHYSFSDIR)/zlib123/trees.c \
$(PHYSFSDIR)/zlib123/uncompr.c \
$(PHYSFSDIR)/zlib123/zutil.c \
EXE := bin/$(APPID)$(EXEEXT)
EXES := $(EXE)

# We force this to build every time, so it can't be an explicit dependency...
LIBS += bin/buildver.o

CFLAGS := -g -pipe -Wall -Werror -fexceptions -fsigned-char $(OPTS) $(INCLUDES) $(DEFINES)
CXXFLAGS := $(CFLAGS)
SHARED_CFLAGS := $(CFLAGS) -fPIC -DPIC
SHARED_CXXFLAGS := $(SHARED_CFLAGS)

.PHONY: clean all docs $(APPID)
ifeq ($(ismacosx),true)
CFLAGS += -mdynamic-no-pic
CXXFLAGS += -mdynamic-no-pic
endif

all: $(APPID)
OBJS := $(SRCS)
OBJS := $(OBJS:.cpp=.o)
OBJS := $(OBJS:.c=.o)
OBJS := $(OBJS:.m=.o)
OBJS := $(foreach f,$(OBJS),bin/$(f))

$(APPID): $(EXE)
.PHONY: clean all docs

all: $(EXE) $(GUIPLUGINS)

docs:
( cat $(ENGINEDIR)/Doxyfile ; echo 'PROJECT_NUMBER="Build Revision $(APPREV)"' ) | doxygen -

clean:
rm -rf $(OBJS) $(EXES) bin/$(SDLDIR)/lib/$(target)/libSDLmain.a docs bin/test/*.o bin/tools/*/*.o
rm -rf bin docs

.PHONY: gui_stdio
gui_stdio: bin/gui/stdio$(DLLEXT)

bin/gui/stdio$(DLLEXT): bin/gui/gui_stdio.o
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) -c -o bin/buildver.o buildver.c
$(LD) $(SHARED_LDFLAGS) -o $@ $^ $(LIBS)

bin/gui/%.o : gui/%.c
@mkdir -p $(dir $@)
$(CC) $(SHARED_CFLAGS) -c -o $@ $<

bin/%.o : %.c
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) -c -o $@ $<

bin/%.o : %.cpp
@mkdir -p $(dir $@)
$(CXX) $(CXXFLAGS) -c -o $@ $<

#$(EXE) : $(OBJS) $(STATICLIBS)
# $(CXX) $(CXXFLAGS) -c -o bin/$(ENGINEDIR)/buildver.o $(ENGINEDIR)/buildver.cpp
# $(LD) $(LDFLAGS) -o $@ $^ $(LIBS)

$(APPID)$(EXEEXT) : $(OBJS) $(STATICLIBS)
$(CXX) $(CXXFLAGS) -c -o bin/$(ENGINEDIR)/buildver.o $(ENGINEDIR)/buildver.cpp
$(EXE) : $(OBJS) $(STATICLIBS)
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) -c -o bin/buildver.o buildver.c
$(LD) $(LDFLAGS) -o $@ $^ $(LIBS)

# end of makefile ...

0 comments on commit 14cd764

Please sign in to comment.