Procházet zdrojové kódy

Fleshed out some pattern code

Eiyeron Fulmincendii před 11 roky
rodič
revize
c150351b9e
2 změnil soubory, kde provedl 43 přidání a 6 odebrání
  1. 38 1
      pattern.c
  2. 5 5
      pattern.h

+ 38 - 1
pattern.c

@@ -2,8 +2,45 @@
 #include "struct.h"
 #include "wall.h"
 
-Pattern* readPattern() {
+static Pattern* allocatePattern(unsigned int pattern_length) {
+	// Freaking free cascade
+	pattern->side = malloc(sizeof(unsigned char) * pattern_length);
+	if(pattern_length->side == NULL) {
+		free(pattern);
+		return NULL;
+	}
+	pattern->distance = malloc(sizeof(unsigned short) * pattern_length);
+	if(pattern_length->distance == NULL) {
+		free(pattern->side);
+		free(pattern);
+		return NULL;
+	}
+	pattern->wall_length = malloc(sizeof(unsigned short) * pattern_length);
+	if(pattern_length->wall_length == NULL) {
+		free(pattern->distance);
+		free(pattern->side);
+		free(pattern);
+		return NULL;
+	}
+
+}
+
+Pattern* readPattern(unsigned char* data, unsigned int length) {
+	unsigned char* iterator = data+1;
+	unsigned i, pattern_length;
+	Pattern* pattern;
+	pattern_length = data[0];
+	pattern = allocatePattern(pattern_length);
+	if(pattern == NULL) return NULL;
+
+	for(int i = 0; i < pattern_length; i++) {
+		pattern->side[i] = data[iterator];
+		pattern->distance[i] = ((data[iterator]+1)<<8) + (data[iterator]+2);
+		pattern->wall_length[i] = ((data[iterator]+2)<<8) + (data[iterator]+3);
+		iterator+= 5;
+	}
 
+	return pattern;
 }
 
 void addPattern(Game_Data* data, Pattern* pattern, unsigned char offset) {

+ 5 - 5
pattern.h

@@ -8,10 +8,10 @@
  * Read a buffer to convert into an dynamically pattern
  * Structure of the pattern data:
  * <pre>
- * XX\n <=> Pattern length (uint_8)
- * AABBBBCCCC\n
- * AABBBBCCCC\n
- * AABBBBCCCC\n
+ * XX <=> Pattern length (uint_8)
+ * AABBBBCCCC
+ * AABBBBCCCC
+ * AABBBBCCCC
  * ...
  * </pre>
  * Legend
@@ -23,7 +23,7 @@
  * @param  data Data to read
  * @return      A brand new pattern
  */
-Pattern* readPattern(unsigned char data);
+Pattern* readPattern(unsigned char* data, unsigned int length);
 
 /**
  * Add the whole patter to the current game.