# HG changeset patch # User meillo@marmaro.de # Date 1226578782 -3600 # Node ID 80df58d240b2b5683eaa2c13ba9bcc74004d4c15 # Parent 73de2151aebd0eb1d41dba3cff06f77386ed5ef8# Parent be637b2ea4820fc1b9e4db8dda115916d1ca4b7c merge diff -r 73de2151aebd -r 80df58d240b2 .hgtags --- a/.hgtags Thu Nov 13 13:15:11 2008 +0100 +++ b/.hgtags Thu Nov 13 13:19:42 2008 +0100 @@ -1,3 +1,4 @@ 69a7cf2f0c06a5e0f0609f80c875e2ceb7ffa9c2 0.1 3903effae5efcba191a6b459da457a3cff897c22 0.2 f9fc4c4f9e3d666dad2bd1efa627fb646334433c 0.3 +7adeee76ce3e24c4ab12f16d48ed4eab09a7daed 0.4 diff -r 73de2151aebd -r 80df58d240b2 Makefile --- a/Makefile Thu Nov 13 13:15:11 2008 +0100 +++ b/Makefile Thu Nov 13 13:19:42 2008 +0100 @@ -9,7 +9,7 @@ DOCS=LICENSE README ChangeLog TODO examples # paths -PREFIX = /usr +PREFIX = /usr/local BINDIR = ${PREFIX}/bin MANDIR = ${PREFIX}/share/man @@ -26,9 +26,10 @@ DEP = baum.h +.PHONY: all +all: options $(NAME) -all: options build - +.PHONY: options options: @echo build options: @echo "CC = ${CC}" @@ -37,56 +38,48 @@ @echo "LDFLAGS = ${LDFLAGS}" @echo -build: options ${NAME} ${NAME}: $(OBJ) ${DEP} $(CC) $(LDFLAGS) $(OBJ) -o $@ + ${OBJ}: ${DEP} -car: clean all -debug: all - gdb ${NAME} - +.PHONY: strip strip: ${NAME} @echo stripping ${NAME} @strip ${NAME} -dist: build changelog + +.PHONY: dist +dist: all changelog @echo "generating tarball" @mkdir -p ${NV} @cp -rf ${SRC} ${DEP} ${NAME}.1 Makefile ${DOCS} ${NV} @fakeroot tar -czhof ${NV}.tar.gz ${NV} @rm -rf ${NV} -deb: dist - @mkdir -p Packages - @cp ${NV}.tar.gz Packages/ - @( \ - cd Packages/ ;\ - tar -xzf ${NV}.tar.gz ;\ - mv ${NV}.tar.gz ${NAME}_${VERSION}.orig.tar.gz ;\ - cd ${NV}/ ;\ - cp -r ../../debian/ . ;\ - debuild ;\ - ) - @rm -rf Packages/${NV} +.PHONY: changelog changelog: @echo generating changelog from mercurial log @hg log -v --style changelog > ChangeLog -install: build strip + +.PHONY: install +install: all strip @echo installing executable file to ${DESTDIR}${BINDIR} @mkdir -p ${DESTDIR}${BINDIR} @cp ${NAME} ${DESTDIR}${BINDIR} @chmod 755 ${DESTDIR}${BINDIR}/${NAME} @echo installing manual page to ${DESTDIR}${MANDIR}/man1 @mkdir -p ${DESTDIR}${MANDIR}/man1 - @sed 's/VERSION/${VERSION}/g' < ${NAME}.1 > ${DESTDIR}${MANDIR}/man1/${NAME}.1 + @cp ${NAME}.1 ${DESTDIR}${MANDIR}/man1 @chmod 644 ${DESTDIR}${MANDIR}/man1/${NAME}.1 + +.PHONY: uninstall uninstall: @echo removing executable file from ${DESTDIR}${BINDIR} @rm -f ${DESTDIR}${BINDIR}/${NAME} @@ -94,17 +87,11 @@ @rm -f ${DESTDIR}${MANDIR}/man1/${NAME}.1 +.PHONY: clean clean: rm -f *.o + +.PHONY: realclean realclean: clean - rm -f ${NAME} - -distclean: realclean - @rm -f ${NAME}-*.tar.gz ChangeLog - -debclean: distclean - @cd Packages/${NV}/ ; debuild clean ; - - -.PHONY: all dist deb changelog clean distclean debclean build install uninstall + rm -f ${NAME} ChangeLog diff -r 73de2151aebd -r 80df58d240b2 actions.c --- a/actions.c Thu Nov 13 13:15:11 2008 +0100 +++ b/actions.c Thu Nov 13 13:19:42 2008 +0100 @@ -11,9 +11,26 @@ unsigned char action_if(struct Node* node); unsigned char action_while(struct Node* node); +struct action { + char* name; + unsigned char (*func)(struct Node* node); +}; + +struct action actions[] = { + {"print", action_print}, + {"sum", action_sum}, + {"number", action_number}, + {"create", action_create}, + {"times", action_times}, + {"if", action_if}, + {"while", action_while}, +}; + unsigned char action(struct Node* node) { + int i; + if (node == NULL) { if (option_verbose) { fprintf(stderr, "warning: action of non existing node\n"); @@ -21,31 +38,14 @@ return 0; } - if (strcmp(node->name, "print") == 0) { - return action_print(node); + for (i = 0; i < (sizeof(actions)/sizeof(actions[0])); i++) { + if (strcmp(actions[i].name, node->name) == 0) { + return (actions[i].func)(node); + } + } - } else if (strcmp(node->name, "sum") == 0) { - return action_sum(node); - - } else if (strcmp(node->name, "number") == 0) { - return action_number(node); - - } else if (strcmp(node->name, "create") == 0) { - return action_create(node); - - } else if (strcmp(node->name, "times") == 0) { - return action_times(node); - - } else if (strcmp(node->name, "if") == 0) { - return action_if(node); - - } else if (strcmp(node->name, "while") == 0) { - return action_while(node); - - } else { fprintf(stderr, "unknown kind of node\n"); exit(4); - } } diff -r 73de2151aebd -r 80df58d240b2 baum.1 --- a/baum.1 Thu Nov 13 13:15:11 2008 +0100 +++ b/baum.1 Thu Nov 13 13:19:42 2008 +0100 @@ -1,4 +1,4 @@ -.TH baum 1 "2008-03-01" "baum 0.4" +.TH baum 1 "2008-06-24" "baum 0.5" .SH NAME baum \- an esoteric programming language diff -r 73de2151aebd -r 80df58d240b2 baum.c --- a/baum.c Thu Nov 13 13:15:11 2008 +0100 +++ b/baum.c Thu Nov 13 13:19:42 2008 +0100 @@ -13,7 +13,7 @@ #include "baum.h" -#define VERSION "0.4" +#define VERSION "0.5" void printNode(struct Node* node, int level);