summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLudovic Pouzenc <ludovic@pouzenc.fr>2010-11-22 18:10:34 +0000
committerLudovic Pouzenc <ludovic@pouzenc.fr>2010-11-22 18:10:34 +0000
commitb5450d4b3f33a6d460c7f223ebb9454824fd5c2d (patch)
tree543521c28fd17008ff2bce3edddf9d3a798c161f /src
parent99cfc03f7fd762b5c7be8548778bdbb37ca2711a (diff)
download2010-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.h22
-rw-r--r--src/parser/parse_ini.yy59
-rw-r--r--src/test/CMakeLists.txt2
-rw-r--r--src/test/testfunc_002_parse.c3
-rw-r--r--src/test/testfunc_003_loadress.c11
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);