diff options
author | Ludovic Pouzenc <ludovic@pouzenc.fr> | 2010-11-22 18:10:34 +0000 |
---|---|---|
committer | Ludovic Pouzenc <ludovic@pouzenc.fr> | 2010-11-22 18:10:34 +0000 |
commit | b5450d4b3f33a6d460c7f223ebb9454824fd5c2d (patch) | |
tree | 543521c28fd17008ff2bce3edddf9d3a798c161f /src | |
parent | 99cfc03f7fd762b5c7be8548778bdbb37ca2711a (diff) | |
download | 2010-netlemmings-b5450d4b3f33a6d460c7f223ebb9454824fd5c2d.tar.gz 2010-netlemmings-b5450d4b3f33a6d460c7f223ebb9454824fd5c2d.tar.bz2 2010-netlemmings-b5450d4b3f33a6d460c7f223ebb9454824fd5c2d.zip |
Les tests compilent à présent
git-svn-id: file:///var/svn/2010-netlemmings/trunk@167 077b3477-7977-48bd-8428-443f22f7bfda
Diffstat (limited to 'src')
-rw-r--r-- | src/include/parser.h | 22 | ||||
-rw-r--r-- | src/parser/parse_ini.yy | 59 | ||||
-rw-r--r-- | src/test/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/test/testfunc_002_parse.c | 3 | ||||
-rw-r--r-- | src/test/testfunc_003_loadress.c | 11 |
5 files changed, 55 insertions, 42 deletions
diff --git a/src/include/parser.h b/src/include/parser.h new file mode 100644 index 0000000..9d2d59b --- /dev/null +++ b/src/include/parser.h @@ -0,0 +1,22 @@ +#ifndef PARSER_H +#define PARSER_H + +#include "data_ini.h" + +#define OUT_OF_BOUNDS "out of bounds" +#define CANNOT_BE_NEGATIVE "cannot be negative" +#define BAD_VALUE "bad value" + +#define MAX_OBJECT_TYPES 32 +#define MAX_OBJECT_FRAMES 64 +#define MAX_OBJECTS_COUNT 256 +#define MAX_TERRAINS_COUNT 1024 +#define MAX_STEELS_COUNT 256 +#define MAX_SOUNDS_COUNT 32 +#define MAX_NUMLEMMINGS 100 +#define STEEL_MAX_WIDTH 256 +#define STEEL_MAX_HEIGHT 256 + +void parse(gameIni_t *gIni); + +#endif /*PARSER_H*/ diff --git a/src/parser/parse_ini.yy b/src/parser/parse_ini.yy index 9b82368..39e0fcb 100644 --- a/src/parser/parse_ini.yy +++ b/src/parser/parse_ini.yy @@ -4,50 +4,18 @@ #include <strings.h> #include <stdint.h> -#include "data_ini.h" - -#define OUT_OF_BOUNDS "out of bounds" -#define CANNOT_BE_NEGATIVE "cannot be negative" -#define BAD_VALUE "bad value" - -#define MAX_OBJECT_TYPES 32 -#define MAX_OBJECT_FRAMES 64 -#define MAX_OBJECTS_COUNT 256 -#define MAX_TERRAINS_COUNT 1024 -#define MAX_STEELS_COUNT 256 -#define MAX_SOUNDS_COUNT 32 -#define MAX_NUMLEMMINGS 100 -#define STEEL_MAX_WIDTH 256 -#define STEEL_MAX_HEIGHT 256 +#include "parser.h" extern FILE *yyin; extern int yylineno; extern char *yytext; extern int yyparse(gameIni_t *gIni); +int yylex(); void yyerror(gameIni_t *gIni, char *s); void yyassert(int condition, char what[], char why[]); -int yylex(); - -void callocIfNull(void **ptr, size_t nmemb, size_t size) { - if (*ptr==NULL && nmemb>0) { - *ptr=calloc(nmemb, size); - } -} - -void parse(gameIni_t *gIni) { - gIni->firstPass=1; - yyparse(gIni); +void callocIfNull(void **ptr, size_t nmemb, size_t size); - callocIfNull((void **)&gIni->style.objects, gIni->style.objectCount, sizeof(struct styleObjects)); - callocIfNull((void **)&gIni->level.objects, gIni->level.objectCount, sizeof(struct levelItem)); - callocIfNull((void **)&gIni->level.terrains, gIni->level.terrainCount, sizeof(struct levelItem)); - callocIfNull((void **)&gIni->level.steels, gIni->level.steelCount, sizeof(struct levelItem)); - - rewind(yyin); - gIni->firstPass=0; - yyparse(gIni); -} %} %parse-param { gameIni_t *gIni } @@ -248,6 +216,20 @@ particles: INTHEX VIR INTHEX VIR INTHEX VIR INTHEX VIR INTHEX VIR INTHEX VIR INT $$[0]=$1; $$[1]=$3; $$[2]=$5; $$[3]=$7; $$[4]=$9; $$[5]=$11; $$[6]=$13; $$[7]=$15 ;$$[8]=$17; $$[9]=$19; $$[10]=$21; $$[11]=$23; $$[12]=$25; $$[13]=$27; $$[14]=$29; $$[15]=$31; } %% +void parse(gameIni_t *gIni) { + gIni->firstPass=1; + yyparse(gIni); + + callocIfNull((void **)&gIni->style.objects, gIni->style.objectCount, sizeof(struct styleObjects)); + callocIfNull((void **)&gIni->level.objects, gIni->level.objectCount, sizeof(struct levelItem)); + callocIfNull((void **)&gIni->level.terrains, gIni->level.terrainCount, sizeof(struct levelItem)); + callocIfNull((void **)&gIni->level.steels, gIni->level.steelCount, sizeof(struct levelItem)); + + rewind(yyin); + gIni->firstPass=0; + yyparse(gIni); +} + void yyassert(int condition, char what[], char why[]){ char msg[256]; if (!condition) { @@ -255,9 +237,16 @@ void yyassert(int condition, char what[], char why[]){ yyerror(NULL, msg); } } + void yyerror(gameIni_t *gIni, char *s) { fprintf(stderr, "(stdin):%i: error: %s near '%s'\n", yylineno, s, yytext); gIni=NULL; /* Faire quelque chose de propre ici */ exit(1); } +void callocIfNull(void **ptr, size_t nmemb, size_t size) { + if (*ptr==NULL && nmemb>0) { + *ptr=calloc(nmemb, size); + } +} + diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt index 8133b44..0695537 100644 --- a/src/test/CMakeLists.txt +++ b/src/test/CMakeLists.txt @@ -5,5 +5,5 @@ set(PARSER_FILES ../parser/lex.yy.c ../parser/y.tab.c) add_executable(testfunc_001_lex WIN32 testfunc_001_lex.c ${PARSER_FILES} ) add_executable(testfunc_002_parse WIN32 testfunc_002_parse.c ${PARSER_FILES} ) -add_executable(testfunc_003_loadress WIN32 testfunc_003_loadress.c ${PARSER_FILES} ) +add_executable(testfunc_003_loadress WIN32 testfunc_003_loadress.c ${PARSER_FILES} ../loader.c ) diff --git a/src/test/testfunc_002_parse.c b/src/test/testfunc_002_parse.c index b09df2e..03b92ca 100644 --- a/src/test/testfunc_002_parse.c +++ b/src/test/testfunc_002_parse.c @@ -1,7 +1,8 @@ #include <stdio.h> #include <string.h> #include "SDL/SDL.h" -#include "../parser/y.tab.h" + +#include "parser.h" #include "data_ini.h" extern FILE *yyin; diff --git a/src/test/testfunc_003_loadress.c b/src/test/testfunc_003_loadress.c index f8c9b65..a5af8d4 100644 --- a/src/test/testfunc_003_loadress.c +++ b/src/test/testfunc_003_loadress.c @@ -1,8 +1,9 @@ #include <stdio.h> #include <string.h> #include "SDL/SDL.h" -#include "../parser/y.tab.h" -#include "../include/loader.h" + +#include "parser.h" +#include "loader.h" #define PATH_STYLE "../styles" #define PATH_LEVEL "../level" @@ -16,7 +17,7 @@ void load_ini(gameIni_t *gIni, char *filepath) { fprintf(stderr, "main(), Could not open '%s'\n", filepath); } printf("Parsing '%s'\n", filepath); - parse(&gIni); + parse(gIni); fclose(yyin); } @@ -31,7 +32,7 @@ int main(int argc, char **argv) { } // Setting default values - memset(gIni,0,sizeof(gameIni_t)); + memset(&gIni,0,sizeof(gameIni_t)); // Loading levelpack.ini snprintf(filepath, MAX_PATH_LEN, "%s/%s/levelpack.ini", PATH_LEVEL, argv[1]); @@ -48,7 +49,7 @@ int main(int argc, char **argv) { } // Loading style ini file - snprintf(filepath, MAX_PATH_LEN, "%s/%s/%2$s.ini", PATH_STYLE, gIni.level.style); + snprintf(filepath, MAX_PATH_LEN, "%s/%s/%s.ini", PATH_STYLE, gIni.level.style, gIni.level.style); load_ini(&gIni, filepath); |