Added first try to extract .tt files
[timetab.git] / tt-extract.c
blobaf4a104a8b0160d9cd78ceea0adb31859514f3a7
1 /*
2 * IDOS Timetable Extractor
4 * (c) 2013 Tomas Pokorny <jethro@kam.mff.cuni.cz>
6 * This software can be freely distributed and used according
7 * to the terms of the GNU General Public License.
8 */
10 #include <stdlib.h>
11 #include <stdio.h>
12 #include <inttypes.h>
13 #include <sys/stat.h>
14 #include <errno.h>
15 #include <stdbool.h>
19 FILE * in;
21 void print_strings(uint32_t offset)
23 fseek(in,offset,SEEK_SET);
24 int32_t count;
26 fread(&count,1,sizeof(count),in);
27 printf("Will read %d strings\n",count);
29 int32_t * indexes;
30 indexes = malloc(sizeof(int32_t)*(count+1));
33 for (int i=0;i<=count;i++){
34 fread(indexes+i,1,sizeof(int32_t),in);
36 fseek(in,4,SEEK_CUR);
38 char buf[4096];
39 for (int i=0;i<count;i++){
40 fread(buf,indexes[i+1]-indexes[i],1,in);
41 for (int j=0; j<indexes[i+1]-indexes[i];j++)
42 printf("%c",buf[j]);
43 printf("\n");
48 int main(int argc, char * argv[])
50 in = fopen(argv[1], "r");
51 int32_t x;
52 int32_t y;
53 FILE * out;
54 int32_t len;
55 int32_t count;
56 int32_t next;
57 int32_t chunks;
58 int32_t blocks;
59 uint8_t * int_count;
60 char key;
61 int nulls;
63 next=0x6F;
64 /* fclose(fopen("data/strings.dat","w"));
65 fclose(fopen("data/stations.dat","w"));
67 fseek(in,next,SEEK_SET);
68 printf("Reading header\n");
69 fread(&len,1,sizeof(count),in);
70 fread(&blocks,1,sizeof(blocks),in);
71 int_count = malloc(blocks);
72 for (int i=0;i<blocks;i++)
73 int_count[i]=2;
74 printf("Len: %d, blocks: %d\n",len,blocks);
75 next = ftell(in)+len;
76 if (!(len%blocks==0))
77 printf("Skipping, header had changed.\n");
78 else{
80 int rec_len;
81 rec_len=len/blocks;
82 int32_t buf[rec_len];
83 for (int i=blocks;i>0;i--){
84 fread(buf,1,rec_len,in);
85 for (int j=0;j<rec_len;j++)
86 printf("%x ",buf[j]);
87 printf("\n");
89 }*/
90 print_strings(next);
91 next=0xFB;
92 print_strings(next);
93 next=0x20B;
94 print_strings(next);
95 printf("At: %x\n",ftell(in));
97 //Banky
98 next=0x4E71C;
99 print_strings(next);
100 printf("At: %x\n",ftell(in));
102 //Bankomaty
103 next=0x59824;
104 print_strings(next);
105 printf("At: %x\n",ftell(in));
107 //Bezbariérové stanice
108 next=0x6184C;
109 print_strings(next);
110 printf("At: %x\n",ftell(in));
112 // Divadla
113 next=0x622CA;
114 print_strings(next);
115 printf("At: %x\n",ftell(in));
117 next=0x676AA;
118 print_strings(next);
119 printf("At: %x\n",ftell(in));