--- /dev/null
+#include "tracklist.h"
+
+#define MAXTRACKLENGTH 80
+
+/* get available local tracks */
+int zeRace_get_tracks(struct _tracklist **tracklist)
+{
+ FILE *fic;
+ char line[MAXTRACKLENGTH];
+ struct _tracklist *tmp=NULL,*first=NULL;
+
+ *tracklist=NULL;
+ if ((fic=fopen("tracks/list.txt","rt"))==NULL)
+ {
+ fprintf(stderr,"can't open track list\n");
+ return 0;
+ }
+ while (!feof(fic))
+ {
+ tmp=(struct _tracklist *)malloc(sizeof(struct _tracklist));
+ if (first==NULL) first=tmp;
+ fgets(line,MAXTRACKLENGTH,fic);
+ tmp->name=(char *)malloc(strlen(line)+1);
+ strcpy(tmp->name,line);
+ tmp->name[strlen(tmp->name)-1]='\0';
+ fgets(line,MAXTRACKLENGTH,fic);
+ tmp->title=(char *)malloc(strlen(line)+1);
+ strcpy(tmp->title,line);
+ fgets(line,MAXTRACKLENGTH,fic);
+ tmp->author=(char *)malloc(strlen(line)+1);
+ strcpy(tmp->author,line);
+ fgets(line,MAXTRACKLENGTH,fic);
+ tmp->version=(char *)malloc(strlen(line)+1);
+ strcpy(tmp->version,line);
+ fgets(line,MAXTRACKLENGTH,fic);
+ tmp->x=atoi(line);
+ fgets(line,MAXTRACKLENGTH,fic);
+ tmp->y=atoi(line);
+ fgets(line,MAXTRACKLENGTH,fic);
+ tmp->a=atoi(line);
+ fgets(line,MAXTRACKLENGTH,fic);
+ tmp->best_time=atoi(line);
+ fgets(line,MAXTRACKLENGTH,fic);
+ tmp->best_pseudo=(char *)malloc(strlen(line)+1);
+ strcpy(tmp->best_pseudo,line);
+ tmp->full=(char *)malloc(strlen(line)+20);
+ sprintf(tmp->full,"tracks/%s.png",tmp->name);
+ tmp->function=(char *)malloc(strlen(line)+30);
+ sprintf(tmp->function,"tracks/%s_function.png",tmp->name);
+ tmp->prev=*tracklist;
+ if (tmp->prev) tmp->prev->next=tmp;
+ *tracklist=tmp;
+ /* skip one line */
+ fgets(line,MAXTRACKLENGTH,fic);
+ }
+ fclose(fic);
+ if (!tmp) { fprintf(stderr,"no circuits found !\n"); return 0; }
+ while (tmp->prev) tmp=tmp->prev;
+ tmp->prev=*tracklist;
+ (*tracklist)->next=tmp;
+ return 1;
+}