Hmm, habs jetzt so versucht aber in den Rückgabewerten steh nur Müll und der Compiler gibt mir bei strcat Warnungen aus, weil ich aus einem unsigned char einen (char*) mache...

Funktionen:
Code:
// Findet das nächste Zeichen mit dem übergebenen Wert in einer Datei, ansonsten wird  -1 zurückgegeben
unsigned long int tpx_find_char(char s) {
	unsigned long int count=-1;
	unsigned long int seek=file.length;
	char p;

	do {
		count++;
		p = ffread();

	} while (!((--seek<0) || (p==s)));
	
	return count;
}

int tpx_read_tag(char* name, char* value) {
	char s;
	 
	// Wenn keine Datei offen ist, abbrechen
	if (!fileopened) {
		return 1;
	}
		
	// Beginn des tags finden
	tpx_find_char('<');
	
	unsigned long int seek=file.length;
	s = ffread();
	seek--;
	do {
		strcat(name, (char*) s);
		s = ffread();
	 } while ((s=='=') || !(seek--));
	
	s = ffread();
	seek--;
	do {
		strcat(value, (char*) s);
		s = ffread();
	 } while ((s=='>') || !(seek--));
	
	
	return 0;
}
Und der Aufruf:
Code:
int main(void) {	 
	
	char *tag;
	char *value;
	
	lcd_init();
	lcd_clear();
	
	sd_init();
	
	lcd_clear();
	
	tag = malloc(30);
	value = malloc(30);
	tag[0] = '\0';
	value[0] = '\0';
	
	char file[] = "testdat.txt";
	fat_str(file);
	ffopen(file);
	lcd_clear();
	tpx_read_tag(tag, value);
	lcd_string("T: ");
	lcd_string(tag);
	lcd_set_cursor(0,1);
	lcd_string("V: ");
	lcd_string(value);
	_delay_ms(1000);
	lcd_clear();
	
	tag[0] = '\0';
	value[0] = '\0';
	
	tpx_read_tag(tag, value);
	lcd_string("T: ");
	lcd_string(tag);
	lcd_set_cursor(0,1);
	lcd_string("V: ");
	lcd_string(value);
	_delay_ms(1000);
		
	ffclose();
	
	return 0;
}