diff --git a/MAKEFILE.DOS b/MAKEFILE.DOS index 863b0c3..48321a0 100644 --- a/MAKEFILE.DOS +++ b/MAKEFILE.DOS @@ -1,105 +1,115 @@ -# MAKEFILE.DOS - Borland Turbo C/C++ Makefile for Cordle -# Usage: make -f makefile.dos -# -# Requirements: -# - Borland Turbo C++ 3.x or compatible -# - PDCurses library for DOS (PDCURSES.LIB) -# -# Memory Model: Small (default) or Medium for larger word lists -# Adjust TC_DIR and PDCURSES_DIR to match your installation paths - -# Turbo C installation directory -TC_DIR = C:\TC - -# PDCurses installation directory -PDCURSES_DIR = C:\PDCURSES - -# Compiler and linker -CC = $(TC_DIR)\BIN\TCC -LINK = $(TC_DIR)\BIN\TLINK - -# Memory model: s=small, m=medium, c=compact, l=large, h=huge -MODEL = h - -# Compiler flags -# -m$(MODEL) = memory model -# -w = enable warnings -# -N = check stack overflow -# -I = include paths -# -D__MSDOS__ = define DOS platform -CFLAGS = -m$(MODEL) -w -N -I$(TC_DIR)\INCLUDE -IINCLUDE -I$(PDCURSES_DIR) -D__MSDOS__ - -# Linker flags -LIBS = $(PDCURSES_DIR)\PDCURSES.LIB -STARTUP = $(TC_DIR)\LIB\C0$(MODEL).OBJ -STDLIBS = $(TC_DIR)\LIB\C$(MODEL).LIB - -# Directories -SRC_DIR = SRC -BUILD_DIR = BUILD - -# Object files -OBJS = $(BUILD_DIR)\MAIN.OBJ $(BUILD_DIR)\GAME.OBJ $(BUILD_DIR)\UI.OBJ $(BUILD_DIR)\WORDS.OBJ - -# Target executable -TARGET = $(BUILD_DIR)\CORDLE.EXE - -# Default target -all: dirs $(TARGET) copywords - -# Create build directory -dirs: - IF NOT EXIST $(BUILD_DIR) MD $(BUILD_DIR) - -# Compile individual source files -$(BUILD_DIR)\MAIN.OBJ: $(SRC_DIR)\MAIN.C - $(CC) $(CFLAGS) -c -o$(BUILD_DIR)\MAIN.OBJ $(SRC_DIR)\MAIN.C - -$(BUILD_DIR)\GAME.OBJ: $(SRC_DIR)\GAME.C - $(CC) $(CFLAGS) -c -o$(BUILD_DIR)\GAME.OBJ $(SRC_DIR)\GAME.C - -$(BUILD_DIR)\UI.OBJ: $(SRC_DIR)\UI.C - $(CC) $(CFLAGS) -c -o$(BUILD_DIR)\UI.OBJ $(SRC_DIR)\UI.C - -$(BUILD_DIR)\WORDS.OBJ: $(SRC_DIR)\WORDS.C - $(CC) $(CFLAGS) -c -o$(BUILD_DIR)\WORDS.OBJ $(SRC_DIR)\WORDS.C - -# Link executable -$(TARGET): $(OBJS) - $(LINK) /x /c $(STARTUP) $(OBJS),$(TARGET),,$(LIBS) $(STDLIBS) - -# Copy word lists to build directory -copywords: - IF NOT EXIST $(BUILD_DIR)\WORDS MD $(BUILD_DIR)\WORDS - COPY WORDS\*.TXT $(BUILD_DIR)\WORDS - -# Clean build artifacts -clean: - IF EXIST $(BUILD_DIR)\*.OBJ DEL $(BUILD_DIR)\*.OBJ - IF EXIST $(BUILD_DIR)\*.EXE DEL $(BUILD_DIR)\*.EXE - IF EXIST $(BUILD_DIR)\*.MAP DEL $(BUILD_DIR)\*.MAP - IF EXIST $(BUILD_DIR)\WORDS\*.TXT DEL $(BUILD_DIR)\WORDS\*.TXT - IF EXIST $(BUILD_DIR)\WORDS RD $(BUILD_DIR)\WORDS - IF EXIST $(BUILD_DIR) RD $(BUILD_DIR) - -# Rebuild everything -rebuild: clean all - -# Help -help: - @ECHO Cordle DOS Makefile - Borland Turbo C++ - @ECHO ======================================== - @ECHO. - @ECHO Targets: - @ECHO all - Build the game (default) - @ECHO clean - Remove build artifacts - @ECHO rebuild - Clean and rebuild - @ECHO help - Show this help - @ECHO. - @ECHO Configuration: - @ECHO Edit TC_DIR and PDCURSES_DIR paths at top of makefile - @ECHO Change MODEL for different memory models (s/m/c/l) - @ECHO. - @ECHO Requirements: - @ECHO - Borland Turbo C++ 3.x - @ECHO - PDCurses library for DOS +# MAKEFILE.DOS - Borland Turbo C/C++ Makefile for Cordle +# Usage: make -f makefile.dos +# +# Requirements: +# - Borland Turbo C++ 3.x or compatible +# - PDCurses library for DOS (PDCURSES.LIB) +# +# Memory Model: Small (default) or Medium for larger word lists +# Adjust TC_DIR and PDCURSES_DIR to match your installation paths + +# Turbo C installation directory +TC_DIR = C:\TC + +# PDCurses installation directory +PDCURSES_DIR = D:\PDC39\DOS + +# Compiler and linker +CC = $(TC_DIR)\BIN\TCC +LINK = $(TC_DIR)\BIN\TLINK + +# Memory model: s=small, m=medium, c=compact, l=large, h=huge +MODEL = h + +# Compiler flags +# -m$(MODEL) = memory model +# -w = enable warnings +# -N = check stack overflow +# -I = include paths +# -D__MSDOS__ = define DOS platform +CFLAGS = -m$(MODEL) -w -N -I$(TC_DIR)\INCLUDE -IINCLUDE -I$(PDCURSES_DIR) -D__MSDOS__ + +# Linker flags +LIBS = $(PDCURSES_DIR)\PDCURSES.LIB +STARTUP = $(TC_DIR)\LIB\C0$(MODEL).OBJ +STDLIBS = $(TC_DIR)\LIB\C$(MODEL).LIB + +# Directories +SRC_DIR = SRC +BUILD_DIR = BUILD + +# Object files +OBJS = $(BUILD_DIR)\MAIN.OBJ $(BUILD_DIR)\GAME.OBJ $(BUILD_DIR)\UI.OBJ $(BUILD_DIR)\WORDS.OBJ + +# Target executable +TARGET = $(BUILD_DIR)\CORDLE.EXE + +# Default target +all: dirs $(TARGET) copywords + +# Create build directory +dirs: + IF NOT EXIST $(BUILD_DIR) MD $(BUILD_DIR) + +# Compile individual source files +$(BUILD_DIR)\MAIN.OBJ: $(SRC_DIR)\MAIN.C + $(CC) $(CFLAGS) -c -o$(BUILD_DIR)\MAIN.OBJ $(SRC_DIR)\MAIN.C + +$(BUILD_DIR)\GAME.OBJ: $(SRC_DIR)\GAME.C + $(CC) $(CFLAGS) -c -o$(BUILD_DIR)\GAME.OBJ $(SRC_DIR)\GAME.C + +$(BUILD_DIR)\UI.OBJ: $(SRC_DIR)\UI.C + $(CC) $(CFLAGS) -c -o$(BUILD_DIR)\UI.OBJ $(SRC_DIR)\UI.C + +$(BUILD_DIR)\WORDS.OBJ: $(SRC_DIR)\WORDS.C + $(CC) $(CFLAGS) -c -o$(BUILD_DIR)\WORDS.OBJ $(SRC_DIR)\WORDS.C + +# Link executable using response file to avoid command line length limits +$(TARGET): $(OBJS) + @ECHO $(STARTUP) + > $(BUILD_DIR)\LINK.RSP + @ECHO $(BUILD_DIR)\MAIN.OBJ + >> $(BUILD_DIR)\LINK.RSP + @ECHO $(BUILD_DIR)\GAME.OBJ + >> $(BUILD_DIR)\LINK.RSP + @ECHO $(BUILD_DIR)\UI.OBJ + >> $(BUILD_DIR)\LINK.RSP + @ECHO $(BUILD_DIR)\WORDS.OBJ >> $(BUILD_DIR)\LINK.RSP + @ECHO $(TARGET) >> $(BUILD_DIR)\LINK.RSP + @ECHO. >> $(BUILD_DIR)\LINK.RSP + @ECHO $(LIBS) + >> $(BUILD_DIR)\LINK.RSP + @ECHO $(STDLIBS) >> $(BUILD_DIR)\LINK.RSP + $(LINK) /x /c @$(BUILD_DIR)\LINK.RSP + +# Copy word lists to build directory +copywords: + IF NOT EXIST $(BUILD_DIR)\WORDS MD $(BUILD_DIR)\WORDS + COPY WORDS\*.TXT $(BUILD_DIR)\WORDS + +# Clean build artifacts +clean: + IF EXIST $(BUILD_DIR)\*.OBJ DEL $(BUILD_DIR)\*.OBJ + IF EXIST $(BUILD_DIR)\*.EXE DEL $(BUILD_DIR)\*.EXE + IF EXIST $(BUILD_DIR)\*.MAP DEL $(BUILD_DIR)\*.MAP + IF EXIST $(BUILD_DIR)\*.RSP DEL $(BUILD_DIR)\*.RSP + IF EXIST $(BUILD_DIR)\WORDS\*.TXT DEL $(BUILD_DIR)\WORDS\*.TXT + IF EXIST $(BUILD_DIR)\WORDS RD $(BUILD_DIR)\WORDS + IF EXIST $(BUILD_DIR) RD $(BUILD_DIR) + +# Rebuild everything +rebuild: clean all + +# Help +help: + @ECHO Cordle DOS Makefile - Borland Turbo C++ + @ECHO ======================================== + @ECHO. + @ECHO Targets: + @ECHO all - Build the game (default) + @ECHO clean - Remove build artifacts + @ECHO rebuild - Clean and rebuild + @ECHO help - Show this help + @ECHO. + @ECHO Configuration: + @ECHO Edit TC_DIR and PDCURSES_DIR paths at top of makefile + @ECHO Change MODEL for different memory models (s/m/c/l) + @ECHO. + @ECHO Requirements: + @ECHO - Borland Turbo C++ 3.x + @ECHO - PDCurses library for DOS diff --git a/src/main.c b/src/main.c index 07f8204..6efd10f 100644 --- a/src/main.c +++ b/src/main.c @@ -55,7 +55,7 @@ static void parse_arguments(int argc, char **argv, char *filename, char *difficu /* Main game loop */ static int main_game_loop(int argc, char *argv[]) { WINDOW *stdscr; - GameState game; + static GameState game; char filename[MAX_FILENAME]; char difficulty[32]; char message[MAX_MESSAGE] = "";