From: Jason S. Ninneman Date: Thu, 29 Jun 2017 15:35:48 +0000 (-0700) Subject: Jettison MAKEWD(), GETTXT(), vocab(), GETIN(), and the old db compiler. X-Git-Tag: 1.1~30 X-Git-Url: https://jxself.org/git/?p=open-adventure.git;a=commitdiff_plain;h=83fb64b5a817de3f1023c79ab2319d01d9dce9ae Jettison MAKEWD(), GETTXT(), vocab(), GETIN(), and the old db compiler. --- diff --git a/Makefile b/Makefile index f1e51f3..da24dd0 100644 --- a/Makefile +++ b/Makefile @@ -38,7 +38,7 @@ endif OBJS=main.o init.o actions.o score.o misc.o saveresume.o common.o CHEAT_OBJS=cheat.o init.o actions.o score.o misc.o saveresume.o common.o -SOURCES=$(OBJS:.o=.c) dungeon.c advent.h common.h adventure.text adventure.yaml Makefile control linenoise/linenoise.[ch] newdungeon.py +SOURCES=$(OBJS:.o=.c) advent.h common.h adventure.text adventure.yaml Makefile control linenoise/linenoise.[ch] newdungeon.py .c.o: $(CC) $(CCFLAGS) $(DBX) -c $< @@ -46,41 +46,33 @@ SOURCES=$(OBJS:.o=.c) dungeon.c advent.h common.h adventure.text adventure.yaml advent: $(OBJS) linenoise.o newdb.o $(CC) $(CCFLAGS) $(DBX) -o advent $(OBJS) newdb.o linenoise.o $(LDFLAGS) $(LIBS) -main.o: advent.h database.h common.h newdb.h +main.o: advent.h common.h newdb.h -init.o: advent.h database.h common.h newdb.h +init.o: advent.h common.h newdb.h -actions.o: advent.h database.h common.h newdb.h +actions.o: advent.h common.h newdb.h -score.o: advent.h database.h common.h newdb.h +score.o: advent.h common.h newdb.h -misc.o: advent.h database.h common.h newdb.h +misc.o: advent.h common.h newdb.h -cheat.o: advent.h database.h common.h newdb.h +cheat.o: advent.h common.h newdb.h -saveresume.o: advent.h database.h common.h newdb.h +saveresume.o: advent.h common.h newdb.h common.o: common.h -dungeon.o: common.h newdb.h - newdb.o: newdb.c newdb.h $(CC) $(CCFLAGS) $(DBX) -c newdb.c -database.h: dungeon - ./dungeon - newdb.c newdb.h: newdungeon.py adventure.yaml python3 newdungeon.py linenoise.o: linenoise/linenoise.h $(CC) $(CCFLAGS) -c linenoise/linenoise.c -dungeon: dungeon.o common.o - $(CC) $(CCFLAGS) -o $@ dungeon.o common.o - clean: - rm -f *.o advent cheat *.html database.h dungeon *.gcno *.gcda + rm -f *.o advent cheat *.html *.gcno *.gcda rm -f newdb.c newdb.h rm -f README advent.6 MANIFEST *.tar.gz rm -f *~ diff --git a/actions.c b/actions.c index 311a71d..f746dee 100644 --- a/actions.c +++ b/actions.c @@ -1,7 +1,6 @@ #include #include #include "advent.h" -#include "database.h" #include "newdb.h" static int fill(token_t, token_t); diff --git a/cheat.c b/cheat.c index f305dba..858a916 100644 --- a/cheat.c +++ b/cheat.c @@ -5,7 +5,6 @@ #include #include #include "advent.h" -#include "database.h" #include "linenoise/linenoise.h" #include "newdb.h" diff --git a/init.c b/init.c index 753135e..d22da5e 100644 --- a/init.c +++ b/init.c @@ -4,7 +4,6 @@ #include #include "advent.h" -#include "database.h" /* * Initialisation diff --git a/main.c b/main.c index 1416e41..c5dc311 100644 --- a/main.c +++ b/main.c @@ -22,7 +22,6 @@ #include #include #include "advent.h" -#include "database.h" #include "linenoise/linenoise.h" #include "newdb.h" diff --git a/misc.c b/misc.c index 61d80d8..dbf4abb 100644 --- a/misc.c +++ b/misc.c @@ -7,7 +7,6 @@ #include #include "advent.h" -#include "database.h" #include "linenoise/linenoise.h" #include "newdb.h" @@ -251,42 +250,6 @@ void rspeak(vocab_t i, ...) va_end(ap); } -bool GETIN(FILE *input, - long *pword1, long *pword1x, - long *pword2, long *pword2x) -/* Get a command from the adventurer. Snarf out the first word, pad it with - * blanks, and return it in WORD1. Chars 6 thru 10 are returned in WORD1X, in - * case we need to print out the whole word in an error message. Any number of - * blanks may follow the word. If a second word appears, it is returned in - * WORD2 (chars 6 thru 10 in WORD2X), else WORD2 is -1. */ -{ - long junk; - - for (;;) { - if (game.blklin) - fputc('\n', stdout);; - if (!MAPLIN(input)) - return false; - *pword1 = GETTXT(true, true, true); - if (game.blklin && *pword1 < 0) - continue; - *pword1x = GETTXT(false, true, true); - do { - junk = GETTXT(false, true, true); - } while - (junk > 0); - *pword2 = GETTXT(true, true, true); - *pword2x = GETTXT(false, true, true); - do { - junk = GETTXT(false, true, true); - } while - (junk > 0); - if (GETTXT(true, true, true) <= 0) - return true; - rspeak(TWO_WORDS); - } -} - void echo_input(FILE* destination, char* input_prompt, char* input) { size_t len = strlen(input_prompt) + strlen(input) + 1; @@ -453,109 +416,8 @@ bool yes(const char* question, const char* yes_response, const char* no_response return (outcome); } -/* Line-parsing routines (GETTXT, MAKEWD, PUTTXT, SHFTXT) */ - -long GETTXT(bool skip, bool onewrd, bool upper) -/* Take characters from an input line and pack them into 30-bit words. - * Skip says to skip leading blanks. ONEWRD says stop if we come to a - * blank. UPPER says to map all letters to uppercase. If we reach the - * end of the line, the word is filled up with blanks (which encode as 0's). - * If we're already at end of line when TEXT is called, we return -1. */ -{ - long text; - static long splitting = -1; - - if (LNPOSN != splitting) - splitting = -1; - text = -1; - while (true) { - if (LNPOSN > LNLENG) - return (text); - if ((!skip) || INLINE[LNPOSN] != 0) - break; - ++LNPOSN; - } - - text = 0; - for (int I = 1; I <= TOKLEN; I++) { - text = text * 64; - if (LNPOSN > LNLENG || (onewrd && INLINE[LNPOSN] == 0)) - continue; - char current = INLINE[LNPOSN]; - if (current < ascii_to_advent['%']) { - splitting = -1; - if (upper && current >= ascii_to_advent['a']) - current = current - 26; - text = text + current; - ++LNPOSN; - continue; - } - if (splitting != LNPOSN) { - text = text + ascii_to_advent['%']; - splitting = LNPOSN; - continue; - } - - text = text + current - ascii_to_advent['%']; - splitting = -1; - ++LNPOSN; - } - - return text; -} - -token_t MAKEWD(long letters) -/* Combine TOKLEN (currently 5) uppercase letters (represented by - * pairs of decimal digits in lettrs) to form a 30-bit value matching - * the one that GETTXT would return given those characters plus - * trailing blanks. Caution: lettrs will overflow 31 bits if - * 5-letter word starts with V-Z. As a kludgey workaround, you can - * increment a letter by 5 by adding 50 to the next pair of - * digits. */ -{ - long i = 1, word = 0; - - for (long k = letters; k != 0; k = k / 100) { - word = word + i * (MOD(k, 50) + 10); - i = i * 64; - if (MOD(k, 100) > 50)word = word + i * 5; - } - i = 64L * 64L * 64L * 64L * 64L / i; - word = word * i; - return word; -} - /* Data structure routines */ -long vocab(long id, long init) -/* Look up ID in the vocabulary (ATAB) and return its "definition" (KTAB), or - * -1 if not found. If INIT is positive, this is an initialisation call setting - * up a keyword variable, and not finding it constitutes a bug. It also means - * that only KTAB values which taken over 1000 equal INIT may be considered. - * (Thus "STEPS", which is a motion verb as well as an object, may be located - * as an object.) And it also means the KTAB value is taken modulo 1000. */ -{ - long lexeme; - - for (long i = 1; i <= TABSIZ; i++) { - if (KTAB[i] == -1) { - lexeme = -1; - if (init < 0) - return (lexeme); - BUG(REQUIRED_VOCABULARY_WORD_NOT_FOUND); // LCOV_EXCL_LINE - } - if (init >= 0 && KTAB[i] / 1000 != init) - continue; - if (ATAB[i] == id) { - lexeme = KTAB[i]; - if (init >= 0) - lexeme = MOD(lexeme, 1000); - return (lexeme); - } - } - BUG(RAN_OFF_END_OF_VOCABULARY_TABLE); // LCOV_EXCL_LINE -} - int get_motion_vocab_id(const char* word) // Return the first motion number that has 'word' as one of its words. { @@ -777,34 +639,6 @@ long randrange(long range) return range * get_next_lcg_value() / game.lcg_m; } -long rndvoc(long second, long force) -/* Searches the vocabulary ATAB for a word whose second character is - * char, and changes that word such that each of the other four - * characters is a random letter. If force is non-zero, it is used - * as the new word. Returns the new word. */ -{ - long rnd = force; - - if (rnd == 0) { - for (int i = 1; i <= 5; i++) { - long j = 11 + randrange(26); - if (i == 2) - j = second; - rnd = rnd * 64 + j; - } - } - - long div = 64L * 64L * 64L; - for (int i = 1; i <= TABSIZ; i++) { - if (MOD(ATAB[i] / div, 64L) == second) { - ATAB[i] = rnd; - break; - } - } - - return rnd; -} - void make_zzword(char zzword[6]) { for (int i = 0; i < 5; ++i) diff --git a/saveresume.c b/saveresume.c index d291361..ab47a3b 100644 --- a/saveresume.c +++ b/saveresume.c @@ -2,7 +2,6 @@ #include #include "advent.h" -#include "database.h" #include "newdb.h" #include "linenoise/linenoise.h" diff --git a/score.c b/score.c index 4e72950..531b230 100644 --- a/score.c +++ b/score.c @@ -1,6 +1,5 @@ #include #include "advent.h" -#include "database.h" #include "newdb.h" /*