bulk commit

This commit is contained in:
josch 2014-06-26 09:03:11 +02:00
parent 56636be4cf
commit b90fd58825
3 changed files with 737 additions and 37 deletions

631
README Normal file
View file

@ -0,0 +1,631 @@
updates.hafas.de/updmgr/db/upd_hafas11.xml
for f in all11w24 eu11w24 db11w24 prs11w24; do wget http://updates.hafas.de/download/db/$f.zip; done
DB14/planatr
============
0000000: 8000 0400 0100 0e72 a54d 0500 0300 0200 .......r.M......
0000010: 0200 b812 0000 7e96 0000 9c33 0000 4204 ......~....3..B.
0000020: f40d 3bc8 0000 671f 0000 282c 932d 4a46 ..;...g...(,.-JF
0000030: 3034 3120 7072 6f64 5f6d 6169 6e5f 6578 041 prod_main_ex
0000040: 706f 7274 5f70 726f 645f 4a31 315f 3034 port_prod_J11_04
0000050: 315f 3030 305f 706c 616e 5f63 6444 425f 1_000_plan_cdDB_
0000060: 7072 6f64 5f30 3431 2030 3030 3030 3020 prod_041 000000
0000070: 454e 4420 4a4a 4a4a 4a4a 4a4a 4a4a 4a4a END JJJJJJJJJJJJ
00: short header length
02: short 4 ???
04: short 1 ???
06: int unix timestamp
12: int 0x12b8 = 4792 (number of 6 byte blocks)
16: int 0x967e = 38526 (number of 8 byte blocks)
1a: int 0x339c = 13212 (number of 6 byte blocks)
1e: short 0x442 = 1090 (number of 4 byte blocks)
20: short 0xdf4 = 3572 (number of 4 byte blocks)
22: int 0xc83b = 51259 ??? (also in planlauf, planbz, planbtr, plangls, planspr, plansz, planu, planuk, planzug)
26: int 0x1f67 = 8039 ???
2a: int 0x2d932c28 = 764619816 ???
0000080: 4792 * 6 byte blocks
00070d0: 38526 * 8 byte blocks
00524c0: 13212 * 6 byte blocks
0065a68: 1090 * 4 byte blocks
0066b70: 3572 * 4 byte blocks
DB14/planatxd
=============
0000000: 7000 0400 0000 0e72 a54d 0200 4b0c 4c0c p......r.M..K.L.
0000010: eb90 0200 0000 0000 0000 282c 932d 4a46 ..........(,.-JF
0000020: 3034 3120 7072 6f64 5f6d 6169 6e5f 6578 041 prod_main_ex
0000030: 706f 7274 5f70 726f 645f 4a31 315f 3034 port_prod_J11_04
0000040: 315f 3030 305f 706c 616e 5f63 6444 425f 1_000_plan_cdDB_
0000050: 7072 6f64 5f30 3431 2030 3030 3030 3020 prod_041 000000
0000060: 454e 4420 4a4a 4a4a 4a4a 4a4a 4a4a 4a4a END JJJJJJJJJJJJ
00: short header length
02: short 4 ???
04: short 0 ???
06: int unix timestamp
0a:
0c: short 0xc4b = 3147 (number of 12 byte blocks)
0e: short 0xc4c = 3148 (number of 6 byte blocks)
10: int 0x290eb = 168171 ???
1a: int 0x2d932c28 = 764619816 ???
0000070: 3148 * 6 byte blocks
short little endian counting up
short
short
0004a38: 3147 * 12 byte blocks
000ddbc: text area (connection info)
DB14/planb
==========
0000000: b000 0400 0000 0e72 a54d 2020 2020 2020 .......r.M
0000010: 2020 2020 2020 2020 2002 0066 4b02 0067 ..fK..g
0000020: 1f00 00dc 2700 0033 0000 004a 4630 3431 ....'..3...JF041
0000030: 2020 2020 2020 2020 2020 2020 5631 2e31 V1.1
0000040: 372f 3123 2042 344c 3441 325a 3234 4c49 7/1# B4L4A2Z24LI
0000050: 4e4f 5333 2020 2020 2020 0700 282c 932d NOS3 ..(,.-
0000060: 4a46 3034 3120 7072 6f64 5f6d 6169 6e5f JF041 prod_main_
0000070: 6578 706f 7274 5f70 726f 645f 4a31 315f export_prod_J11_
0000080: 3034 315f 3030 305f 706c 616e 5f63 6444 041_000_plan_cdD
0000090: 425f 7072 6f64 5f30 3431 2030 3030 3030 B_prod_041 00000
00000a0: 3020 454e 4420 4a4a 4a4a 4a4a 4a4a 4a4a 0 END JJJJJJJJJJ
00: short header length
02: short 4 ???
04: short 0 ???
06: int unix timestamp
...
1b: int 0x24b66 = 150374 ???
1f: int 0x1f67 = 8039 (number of 14 byte blocks)
23: int 0x27dc = 10204 (half the number of 8 byte blocks)
27: int 0x33 = 51 ???
31: text \0 terminated
5b: int 0x2d932c28 = 764619816 ???
60: text not terminated
00000b0: 8039 * 14 byte blocks (same amount as in planbz)
char RANDOM
char 00
short 0800 1000 0c00 0100
short 0000 0300 0700
int little endian counting up (city IDs)
short RANDOM
short 0000
001b852: 20408 * 8 byte blocks
int RANDOM
int little endian counting up
002f732: text area \0 delimetered (station names)
DB14/planbetr
=============
0000000: 7000 0400 0000 0e72 a54d 3bc8 0000 0411 p......r.M;.....
0000010: 0000 7c00 6b0e 0000 d800 0600 e805 0000 ..|.k...........
0000020: 282c 932d 4a46 3034 3120 7072 6f64 5f6d (,.-JF041 prod_m
0000030: 6169 6e5f 6578 706f 7274 5f70 726f 645f ain_export_prod_
0000040: 4a31 315f 3034 315f 3030 305f 706c 616e J11_041_000_plan
0000050: 5f63 6444 425f 7072 6f64 5f30 3431 2030 _cdDB_prod_041 0
0000060: 3030 3030 3020 454e 4420 4a4a 4a4a 4a4a 00000 END JJJJJJ
00: short header length
02: short 4 ???
04: short 0 ???
06: int unix timestamp
0a: int 0xc83b = 51259 ??? (also in planlauf, planatr, planbz, plangls, planspr, plansz, planu, planuk, planzug)
0e: int 0x1104 = 4356 (number of 10 byte blocks)
12: short 0x7c = 124 ???
14: int 0xe6b = 3691 ???
...
10: int 0x2d932c28 = 764619816 ???
0000070: text area \0 delimetered (train names)
00014c2: big areas of unidentifiable stuff
001a6e9: 4356 * 10 byte blocks
int counting up
char RANDOM
char 0
int RANDOM every second the same
DB14/planbz
===========
0000000: 8000 0400 0000 0e72 a54d fe65 0a00 530f .......r.M.e..S.
0000010: b409 b409 671f 0000 3bc8 0000 282c 932d ....g...;...(,.-
0000020: 4a46 3034 3120 7072 6f64 5f6d 6169 6e5f JF041 prod_main_
0000030: 6578 706f 7274 5f70 726f 645f 4a31 315f export_prod_J11_
0000040: 3034 315f 3030 305f 706c 616e 5f63 6444 041_000_plan_cdD
0000050: 425f 7072 6f64 5f30 3431 2030 3030 3030 B_prod_041 00000
0000060: 3020 454e 4420 0056 312e 3137 2f31 2320 0 END .V1.17/1#
0000070: 4234 4c34 4132 5a32 344c 494e 4f53 3300 B4L4A2Z24LINOS3.
00: short header length
02: short 4 ???
04: short 0 ???
06: int unix timestamp
0a: int 0xa65fe = 681470 ???
10: double byte tuple as in planatxd
14: int 0x1f67 = 8039 ???
18: int 0xc83b = 51259 ??? (also in planlauf, planatr, planbtr, plangls, planspr, plansz, planu, planuk, planzug)
14: 0x1f67 = 8039 (number of 6 byte blocks)
0000080: 8039 * 6 byte blocks (same amount as in planb, plancon, plangat, plankant)
short RANDOM
int offset in RANDOMNESS
000bc6a: RANDOMNESS
DB14/plancon
============
0000000: 8000 0400 0100 0e72 a54d 671f 0000 fa06 .......r.Mg.....
0000010: 0000 b100 0000 0000 7402 0000 dc04 0000 ........t.......
0000020: 0000 0100 0a00 0800 282c 932d 4a46 3034 ........(,.-JF04
0000030: 3120 7072 6f64 5f6d 6169 6e5f 6578 706f 1 prod_main_expo
0000040: 7274 5f70 726f 645f 4a31 315f 3034 315f rt_prod_J11_041_
0000050: 3030 305f 706c 616e 5f63 6444 425f 7072 000_plan_cdDB_pr
0000060: 6f64 5f30 3431 2030 3030 3030 3020 454e od_041 000000 EN
0000070: 4420 4a4a 4a4a 4a4a 4a4a 4a4a 4a4a 4a4a D JJJJJJJJJJJJJJ
00: short header length
02: short 4 ???
04: short 1 ???
06: int unix timestamp
0a: int 0x1f67 = 8039 ??? (same amount as in planb planbz, plangat, plankant)
0e: int 0x6fa = 1786 (number of 10 byte blocks)
12: int 0xb1 = 177 (number of 6 byte blocks)
18: int 0x274 = 628 ???
1c: int 0x4dc = 1244 ???
0000080: 1786 * 10 byte blocks
0004644: multiple of 4 byte blocks ???
000c3d8: 4 byte blocks ???
000eaf8: 177 * 6 byte blocks
DB14/plangat
============
0000000: 7000 0400 0000 0e72 a54d 7f00 671f 0000 p......r.M..g...
0000010: 0900 d200 0000 d10e 0000 0000 0000 0e08 ................
0000020: 047f 0028 2c93 2d4a 4630 3431 2070 726f ...(,.-JF041 pro
0000030: 645f 6d61 696e 5f65 7870 6f72 745f 7072 d_main_export_pr
0000040: 6f64 5f4a 3131 5f30 3431 5f30 3030 5f70 od_J11_041_000_p
0000050: 6c61 6e5f 6364 4442 5f70 726f 645f 3034 lan_cdDB_prod_04
0000060: 3120 3030 3030 3030 2045 4e44 204a 4a4a 1 000000 END JJJ
00: short header length
02: short 4 ???
04: short 0 ???
06: int unix timestamp
0a: short 0x7f = 127 (number of 34 byte blocks)
0c: int 0x1f67 = 8039 ??? (same amount as in planb, planbz, plancon, plankant)
0000070: 127 * 34 byte blocks (train data)
000114e: ??? blocks
00026e4: text data (train info)
DB14/plangls
============
0000000: 7000 0400 0100 0e72 a54d 0200 c90e 0100 p......r.M......
0000010: 5425 4d00 6c6d 0000 cc01 3bc8 0000 671f T%M.lm....;...g.
0000020: 0000 282c 932d 4a46 3034 3120 7072 6f64 ..(,.-JF041 prod
0000030: 5f6d 6169 6e5f 6578 706f 7274 5f70 726f _main_export_pro
0000040: 645f 4a31 315f 3034 315f 3030 305f 706c d_J11_041_000_pl
0000050: 616e 5f63 6444 425f 7072 6f64 5f30 3431 an_cdDB_prod_041
0000060: 2030 3030 3030 3020 454e 4420 4a4a 4a4a 000000 END JJJJ
00: short header length
02: short 4 ???
04: short 1 ???
06: int unix timestamp
0a: short 0200 ???
0c: int 0x10ec9 = 69321 (number of 10 byte blocks)
10: int 0x4d2554 = 5055828 ???
14: int 0x6d6c = 28012 (number of 6 byte blocks)
18: short 0x1cc = 460 (number of track names)
1a: int 0xc83b = 51259 ??? (also in planlauf, planatr, planbtr, planbz, planspr, plansz, planu, planuk, planzug)
1e: int 0x1f67 = 8039 ???
22: int 0x2d932c28 = 764619816 ???
0000070: 69321 * 10 byte blocks
int counting up to 0xc7ff incrementing not leaving out a value but some twice
short
int counting up - offsets of blocks in next segment
00a944a: first int gives number of 6 byte tuples to follow.
there exist as many of those as 10 byte blocks (69321)
int 0119, 0219, ... 1819
short
057b99e: 28012 * 6 byte blocks
short track name id
short RANDOM
short 0000
05a4a26: 460 track names, 8 chars each, rest spaces
DB14/plangrz
============
0000000: 6000 0400 0000 0e72 a54d 0200 3900 282c `......r.M..9.(,
0000010: 932d 4a46 3034 3120 7072 6f64 5f6d 6169 .-JF041 prod_mai
0000020: 6e5f 6578 706f 7274 5f70 726f 645f 4a31 n_export_prod_J1
0000030: 315f 3034 315f 3030 305f 706c 616e 5f63 1_041_000_plan_c
0000040: 6444 425f 7072 6f64 5f30 3431 2030 3030 dDB_prod_041 000
0000050: 3030 3020 454e 4420 4a4a 4a4a 4a4a 4a4a 000 END JJJJJJJJ
00: short header length
02: short 4 ???
04: short 0 ???
06: int unix timestamp
0a: short 0200 ???
0c: short 0x39 = 57 (number of 4 byte blocks)
0e: int 0x2d932c28 = 764619816 ???
0000060: 57 * 4 byte blocks
int string offset from text start
0000144: text data - station names including IDs
DB14/plankant
=============
0000000: 6000 0400 0000 0e72 a54d a671 0000 4400 `......r.M.q..D.
0000010: 0000 671f 0000 282c 932d 4a46 3034 3120 ..g...(,.-JF041
0000020: 7072 6f64 5f6d 6169 6e5f 6578 706f 7274 prod_main_export
0000030: 5f70 726f 645f 4a31 315f 3034 315f 3030 _prod_J11_041_00
0000040: 305f 706c 616e 5f63 6444 425f 7072 6f64 0_plan_cdDB_prod
0000050: 5f30 3431 2030 3030 3030 3020 454e 4420 _041 000000 END
00: short header length
02: short 4 ???
04: short 0 ???
06: int unix timestamp
0a: int 0x71a6 = 29094 (number of 10 byte blocks)
0e: int 0x44 = 68 ???
12: int 0x1f67 = 8039 (number of 4 byte blocks - same as in planb, planbz, plancon, plangat)
16: int 0x2d932c28 = 764619816 ???
0000060: 8039 * 4 byte blocks (looks like 8040 but 8039 fits better with the header)
0007dfc: int that looks as if it belongs to the last
0007e00: 29094 * 10 byte blocks
int
int
short
DB14/plankgeo
=============
0000000: 6000 0400 0000 0e72 a54d 671f 0000 0000 `......r.Mg.....
0000010: 0000 0000 282c 932d 4a46 3034 3120 7072 ....(,.-JF041 pr
0000020: 6f64 5f6d 6169 6e5f 6578 706f 7274 5f70 od_main_export_p
0000030: 726f 645f 4a31 315f 3034 315f 3030 305f rod_J11_041_000_
0000040: 706c 616e 5f63 6444 425f 7072 6f64 5f30 plan_cdDB_prod_0
0000050: 3431 2030 3030 3030 3020 454e 4420 4a4a 41 000000 END JJ
00: short header length
02: short 4 ???
04: short 0 ???
06: int unix timestamp
0a: int 0x1f67 = 8039 (number of 8 byte blocks)
14: int 0x2d932c28 = 764619816 ???
0000060: 8039 * 8 byte blocks
4 shorts with value close together
DB14/plankm
===========
0000000: 7000 0400 0000 0e72 a54d 671f 0000 0100 p......r.Mg.....
0000010: 0000 0000 4042 0f00 0000 0000 0000 0000 ....@B..........
0000020: 282c 932d 4a46 3034 3120 7072 6f64 5f6d (,.-JF041 prod_m
0000030: 6169 6e5f 6578 706f 7274 5f70 726f 645f ain_export_prod_
0000040: 4a31 315f 3034 315f 3030 305f 706c 616e J11_041_000_plan
0000050: 5f63 6444 425f 7072 6f64 5f30 3431 2030 _cdDB_prod_041 0
0000060: 3030 3030 3020 454e 4420 4a4a 4a4a 4a4a 00000 END JJJJJJ
00: short header length
02: short 4 ???
04: short 0 ???
06: int unix timestamp
0a: int 0x1f67 = 8039 (number of 4 byte blocks)
20: int 0x2d932c28 = 764619816 ???
000070: 8039 * 4 byte blocks
DB14/planlauf
=============
0000000: 6000 0400 0000 0e72 a54d 8939 0000 671f `......r.M.9..g.
0000010: 0000 3bc8 0000 282c 932d 4a46 3034 3120 ..;...(,.-JF041
0000020: 7072 6f64 5f6d 6169 6e5f 6578 706f 7274 prod_main_export
0000030: 5f70 726f 645f 4a31 315f 3034 315f 3030 _prod_J11_041_00
0000040: 305f 706c 616e 5f63 6444 425f 7072 6f64 0_plan_cdDB_prod
0000050: 5f30 3431 2030 3030 3030 3020 454e 4420 _041 000000 END
00: short header length
02: short 4 ???
04: short 0 ???
06: int unix timestamp
0a: int 0x3989 = 14729 (number of 4 byte blocks)
0e: int 0x1f67 = 8039 ???
12: int 0xc83b = 51259 ??? (also in plangls, planatr, planbtr, planbz, planspr, plansz, planu, planuk, planzug)
16: int 0x2d932c28 = 764619816 ???
0000060: 14729 * 4 byte blocks
int counting up - offsets of next 4 bytes blocks from beginning of file
000e684: 210663 * 4 byte blocks
DB14/planline
=============
0000000: 6000 6c00 671f 0000 0400 0000 0e72 a54d `.l.g........r.M
0000010: 0200 282c 932d 4a46 3034 3120 7072 6f64 ..(,.-JF041 prod
0000020: 5f6d 6169 6e5f 6578 706f 7274 5f70 726f _main_export_pro
0000030: 645f 4a31 315f 3034 315f 3030 305f 706c d_J11_041_000_pl
0000040: 616e 5f63 6444 425f 7072 6f64 5f30 3431 an_cdDB_prod_041
0000050: 2030 3030 3030 3020 454e 4420 4a4a 4a4a 000000 END JJJJ
00: short header length
02: short 0x6c = 108 (number of 9 byte blocks)
04: int 0x1f67 = 8039 ???
0c: int unix timestamp
10: short 0x2 ???
12: int 0x2d932c28 = 764619816 ???
0000060: 108 * 9 byte blocks
DB14/planmeta
=============
0000000: 7000 0400 0500 0e72 a54d 671f 0000 4e04 p......r.Mg...N.
0000010: 0000 c500 0000 0000 0000 0000 0000 0100 ................
0000020: 282c 932d 4a46 3034 3120 7072 6f64 5f6d (,.-JF041 prod_m
0000030: 6169 6e5f 6578 706f 7274 5f70 726f 645f ain_export_prod_
0000040: 4a31 315f 3034 315f 3030 305f 706c 616e J11_041_000_plan
0000050: 5f63 6444 425f 7072 6f64 5f30 3431 2030 _cdDB_prod_041 0
0000060: 3030 3030 3020 454e 4420 4a4a 4a4a 4a4a 00000 END JJJJJJ
00: short header length
02: short 4 ???
04: short 5 ???
06: int unix timestamp
0a: int 0x1f67 = 8039 (number of 4 byte blocks)
0e: int 0x44e = 1102 (number of 4 byte blocks)
12: int 0xc5 = 197 (number of 16 byte blocks)
20: int 0x2d932c28 = 764619816 ???
0000070: 197 * 16 byte blocks
0000cc0: 8093 * 4 byte blocks
0008a5c: 1102 * 4 byte blocks
DB14/planmw
===========
0000000: 0400 0000
4 byte header? random after?
DB14/planng
===========
0000000: 7002 0000 f0af 0000 0400 0000 0e72 a54d p............r.M
0000010: 0200 0300 178e 0100 b015 0000 0600 0000 ................
0000020: 671f 0000 dc27 0000 282c 932d 0000 0000 g....'..(,.-....
0000030: 0000 0000 0000 0000 0000 0000 0000 0000 ................
*
00000e0: 0000 0000 0000 0000 0000 0000 4141 4141 ............AAAA
00000f0: 0041 4143 4545 4545 4949 4949 444e 4f4f .AACEEEEIIIIDNOO
0000100: 4f4f 0000 4f55 5555 0059 0000 6161 6161 OO..OUUU.Y..aaaa
0000110: 0061 6163 6565 6565 6969 6969 646e 6f6f .aaceeeeiiiidnoo
0000120: 6f6f 0000 6f75 7575 0079 0000 0001 0203 oo..ouuu.y......
0000130: 0405 0607 0809 0a0b 0c0d 0e0f 1011 1213 ................
0000140: 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 ............ !"#
0000150: 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 $%&'()*+,-./0123
0000160: 3435 3637 3839 3a3b 3c3d 3e3f 4061 6263 456789:;<=>?@abc
0000170: 6465 6667 6869 6a6b 6c6d 6e6f 7071 7273 defghijklmnopqrs
0000180: 7475 7677 7879 7a5b 5c5d 5e5f 6061 6263 tuvwxyz[\]^_`abc
0000190: 6465 6667 6869 6a6b 6c6d 6e6f 7071 7273 defghijklmnopqrs
00001a0: 7475 7677 7879 7a7b 7c7d 7e7f 8081 8283 tuvwxyz{|}~.....
00001b0: 8485 8687 8889 9a8b 9c8d 8e8f 9091 9293 ................
00001c0: 9495 9697 9899 9a9b 9c9d 9eff a0a1 a2a3 ................
00001d0: a4a5 a6a7 a8a9 aaab acad aeaf b0b1 b2b3 ................
00001e0: b4b5 b6b7 b8b9 babb bcbd bebf e0e1 e2e3 ................
00001f0: e4e5 e6e7 e8e9 eaeb eced eeef f0f1 f2f3 ................
0000200: f4f5 f6d7 f8f9 fafb fcfd fedf e0e1 e2e3 ................
0000210: e4e5 e6e7 e8e9 eaeb eced eeef f0f1 f2f3 ................
0000220: f4f5 f6f7 f8f9 fafb fcfd feff c403 4165 ..............Ae
0000230: 00c5 0341 6100 c603 4165 00d6 034f 6500 ...Aa...Ae...Oe.
0000240: d803 4f65 00dc 0355 6500 df03 7373 00e4 ..Oe...Ue...ss..
0000250: 0361 6500 e503 6161 00e6 0361 6500 f603 .ae...aa...ae...
0000260: 6f65 00f8 036f 6500 fc03 7565 0000 2020 oe...oe...ue..
624 byte header??
DB14/planrich
=============
0000000: 6000 0400 0300 0e72 a54d 0200 8500 282c `......r.M....(,
0000010: 932d 4a46 3034 3120 7072 6f64 5f6d 6169 .-JF041 prod_mai
0000020: 6e5f 6578 706f 7274 5f70 726f 645f 4a31 n_export_prod_J1
0000030: 315f 3034 315f 3030 305f 706c 616e 5f63 1_041_000_plan_c
0000040: 6444 425f 7072 6f64 5f30 3431 2030 3030 dDB_prod_041 000
0000050: 3030 3020 454e 4420 4a4a 4a4a 4a4a 4a4a 000 END JJJJJJJJ
00: short header length
02: short 4 ???
04: short 3 ???
06: int unix timestamp
0c: short 0x85 = 133 (number of 4 byte blocks)
0e: int 0x2d932c28 = 764619816 ???
0000060: 133 * 4 byte blocks (string offset from text start)
0000274: text data (station names)
DB14/plansort
=============
0c00 0400 0000 0e72 a54d 0200
random?
DB14/planspr
============
0000000: 5c00 0400 0000 0e72 a54d 123c 0000 3bc8 \......r.M.<..;.
0000010: 0000 282c 932d 4a46 3034 3120 7072 6f64 ..(,.-JF041 prod
0000020: 5f6d 6169 6e5f 6578 706f 7274 5f70 726f _main_export_pro
0000030: 645f 4a31 315f 3034 315f 3030 305f 706c d_J11_041_000_pl
0000040: 616e 5f63 6444 425f 7072 6f64 5f30 3431 an_cdDB_prod_041
0000050: 2030 3030 3030 3020 454e 4420 d601 0000 000000 END ....
0000060: 0000 9ec5 0000 0000 d601 0000 0000 9fc5 ................
00: short header length
02: short 4 ???
04: short 0 ???
06: int unix timestamp
0a: int 0x3c12 = 15378 (number of 12 byte blocks)
0e: int 0xc83b = 51259 ??? (also in plangls, planatr, planbtr, planbz, planlauf, plansz, planu, planuk, planzug)
000005c: 15378 * 12 byte blocks
DB14/plansz
===========
0000000: 5c00 0400 0000 0e72 a54d b302 0000 3bc8 \......r.M....;.
0000010: 0000 282c 932d 4a46 3034 3120 7072 6f64 ..(,.-JF041 prod
0000020: 5f6d 6169 6e5f 6578 706f 7274 5f70 726f _main_export_pro
0000030: 645f 4a31 315f 3034 315f 3030 305f 706c d_J11_041_000_pl
0000040: 616e 5f63 6444 425f 7072 6f64 5f30 3431 an_cdDB_prod_041
0000050: 2030 3030 3030 3020 454e 4420 3b04 0000 000000 END ;...
00: short header length
02: short 4 ???
04: short 0 ???
06: int unix timestamp
0a: int 0x2b3 = 691 (number of 12 byte blocks)
0e: int 0xc83b = 51259 ??? (also in plangls, planatr, planbtr, planbz, planlauf, planspr, planu, planuk, planzug)
12: int 0x2d932c28 = 764619816 ???
000005c: 691 * 12 byte blocks
DB14/planu
==========
0000000: 9000 0400 0100 0e72 a54d 0500 0500 e607 .......r.M......
0000010: 0000 0000 0000 ead1 0100 0000 0000 0000 ................
0000020: 0000 0000 0000 0000 0000 671f 0000 3bc8 ..........g...;.
0000030: 0000 282c 932d 0000 0000 0000 2800 4a46 ..(,.-......(.JF
0000040: 3034 3120 7072 6f64 5f6d 6169 6e5f 6578 041 prod_main_ex
0000050: 706f 7274 5f70 726f 645f 4a31 315f 3034 port_prod_J11_04
0000060: 315f 3030 305f 706c 616e 5f63 6444 425f 1_000_plan_cdDB_
0000070: 7072 6f64 5f30 3431 2030 3030 3030 3020 prod_041 000000
0000080: 454e 4420 4a4a 4a4a 4a4a 4a4a 4a4a 4a4a END JJJJJJJJJJJJ
00: short header length
02: short 4 ???
04: short 1 ???
06: int unix timestamp
0e: int 0x7e6 = 2022 (number of 8 byte blocks)
16: int 0x1d1ea = 119274 (number of 18 byte blocks - 1)
2a: int 0x1f67 = 8039 ???
2e: int 0xc83b = 51259 ??? (also in plangls, planatr, planbtr, planbz, planlauf, planspr, plansz, planuk, planzug)
32: int 0x2d932c28 = 764619816 ???
0000090: 2022 * 8 byte blocks
0003fc0: 119275 * 18 byte blocks
DB14/planuk
===========
0000000: 6e00 0400 0000 0e72 a54d 4000 8c04 0000 n......r.M@.....
0000010: 0d00 0000 0d00 0000 671f 0000 3bc8 0000 ........g...;...
0000020: 282c 932d 0000 0000 4a46 3034 3120 7072 (,.-....JF041 pr
0000030: 6f64 5f6d 6169 6e5f 6578 706f 7274 5f70 od_main_export_p
0000040: 726f 645f 4a31 315f 3034 315f 3030 305f rod_J11_041_000_
0000050: 706c 616e 5f63 6444 425f 7072 6f64 5f30 plan_cdDB_prod_0
0000060: 3431 2030 3030 3030 3020 454e 4420 0000 41 000000 END ..
00: short header length
02: short 4 ???
04: short 0 ???
06: int unix timestamp
18: int 0x1f67 = 8039 ???
1c: int 0xc83b = 51259 ??? (also in plangls, planatr, planbtr, planbz, planlauf, planspr, plansz, planu, planzug)
20: int 0x2d932c28 = 764619816 ???
000006e: 12000 bytes
DB14/planw
==========
0000000: 8000 0400 0100 0e72 a54d 2020 2020 2020 .......r.M
0000010: 2020 2020 2020 2020 2044 5400 0045 5400 DT..ET.
0000020: 002e 0028 2c93 2d00 0000 004a 4630 3431 ...(,.-....JF041
0000030: 2070 726f 645f 6d61 696e 5f65 7870 6f72 prod_main_expor
0000040: 745f 7072 6f64 5f4a 3131 5f30 3431 5f30 t_prod_J11_041_0
0000050: 3030 5f70 6c61 6e5f 6364 4442 5f70 726f 00_plan_cdDB_pro
0000060: 645f 3034 3120 3030 3030 3030 2045 4e44 d_041 000000 END
0000070: 204a 4a4a 4a4a 4a4a 4a4a 4a4a 4a4a 4a4a JJJJJJJJJJJJJJJ
00: short header length
02: short 4 ???
04: short 1 ???
06: int unix timestamp
0d: int 0x5445 = 21573 (number of 4 byte blocks)
23: int 0x2d932c28 = 764619816 ???
0000080: 21573 * 4 byte blocks
0015194:
DB14/planzug
============
0000000: 7000 0400 0000 0e72 a54d 3bc8 0000 8939 p......r.M;....9
0000010: 0000 0000 0000 671f 0000 282c 932d 4a46 ......g...(,.-JF
0000020: 3034 3120 7072 6f64 5f6d 6169 6e5f 6578 041 prod_main_ex
0000030: 706f 7274 5f70 726f 645f 4a31 315f 3034 port_prod_J11_04
0000040: 315f 3030 305f 706c 616e 5f63 6444 425f 1_000_plan_cdDB_
0000050: 7072 6f64 5f30 3431 2030 3030 3030 3020 prod_041 000000
0000060: 454e 4420 4a4a 4a4a 4a4a 4a4a 4a4a 4a4a END JJJJJJJJJJJJ
00: short header length
02: short 4 ???
04: short 0 ???
06: int unix timestamp
0a: int 0xc83b = 51259 (number of 2 byte blocks) (also in plangls, planatr, planbtr, planbz, planlauf, planspr, plansz, planu, planuk)
0e: int 0x3989 = 14729 ???
16: int 0x1f67 = 8039 ???
1a: int 0x2d932c28 = 764619816 ???
0000070: 51259 * 2 byte
00190e6:
DB14/planzz
===========
0000000: 6000 0400 0000 0e72 a54d 2400 0000 5a00 `......r.M$...Z.
0000010: 0000 0061 f800 8060 0001 4a46 3034 3120 ...a...`..JF041
0000020: 7072 6f64 5f6d 6169 6e5f 6578 706f 7274 prod_main_export
0000030: 5f70 726f 645f 4a31 315f 3034 315f 3030 _prod_J11_041_00
0000040: 305f 706c 616e 5f63 6444 425f 7072 6f64 0_plan_cdDB_prod
0000050: 5f30 3431 2030 3030 3030 3020 454e 4420 _041 000000 END
00: short header length
02: short 4 ???
04: short 0 ???
06: int unix timestamp
0000060:

40
painter.py Normal file
View file

@ -0,0 +1,40 @@
from PIL import Image, ImageDraw
XOFF = 14700
YOFF = 9770
W = 10000
H = 10000
f = open("cities_germany_291009.out.txt")
city, x, y, l = f.readline().split("\t")
min_x = int(x)
max_x = int(x)
min_y = int(y)
max_y = int(y)
for line in f:
city, x, y, l = line.split("\t")
if int(x) > max_x:
max_x = int(x)
if int(x) < min_x:
min_x = int(x)
if int(y) > max_y:
max_y = int(y)
if int(y) < min_y:
min_y = int(y)
print min_x, max_x, min_y, max_y
w = (max_x-min_x)/10000
h = (max_y-min_y)/10000
print w, h
im = Image.new("1", (W, H), 1)
draw = ImageDraw.Draw(im)
f.seek(0)
for line in f:
city, x, y, l = line.split("\t")
draw.point(((int(x)-min_x)/100000-XOFF,H-((int(y)-min_y)/100000-YOFF)), fill=0)
im.save("out.png", "PNG")

View file

@ -7,6 +7,8 @@ from time import sleep
from datetime import timedelta, date, time, datetime from datetime import timedelta, date, time, datetime
from lxml import etree from lxml import etree
DEBUG = 3
def get_id(station): def get_id(station):
return get_ids(station+"!")[0] return get_ids(station+"!")[0]
@ -108,9 +110,9 @@ def get_departures(station, dt):
"date":dt.strftime("%d.%m.%Y"), "date":dt.strftime("%d.%m.%Y"),
"time":dt.strftime("%H:%M"), "time":dt.strftime("%H:%M"),
"boardType":"dep", "boardType":"dep",
"sTI":"0", "sTI":"0", # can be left out
"L":"vs_java3", "L":"vs_java3", # also vs_java
"input":dep_station, "input":station,
"productsFilter":"1"*14 "productsFilter":"1"*14
}), }),
{"User-Agent":"Java/1.6.0_0"}) {"User-Agent":"Java/1.6.0_0"})
@ -165,7 +167,7 @@ def get_stops(train, dep_station, arr_station, dt):
result.append(s) result.append(s)
return result return result
print get_stops('RE 36072', 8010334, 8010310, datetime(2010, 06, 18, 15, 43)) #print get_stops('RE 36072', 8010334, 8010310, datetime(2010, 06, 18, 15, 43))
#late: #late:
#http://mobile.bahn.de/bin/mobil/bhftafel.exe/dn? #http://mobile.bahn.de/bin/mobil/bhftafel.exe/dn?
@ -212,6 +214,10 @@ def get_pln_data(start, end, stop1=None, stop2=None, dt=None, bike=False,
s = StringIO(r.read()) # this is why a stringio has to be created for gzip s = StringIO(r.read()) # this is why a stringio has to be created for gzip
return GzipFile(mode="r", fileobj=s) # possibly replacable by manually reading the gzip header return GzipFile(mode="r", fileobj=s) # possibly replacable by manually reading the gzip header
def debug(level, *args):
if DEBUG >= level:
print "\033[1m"+args[0]%args[1:]+"\033[0m"
class PlnParse: class PlnParse:
""" """
all data in little endian all data in little endian
@ -225,17 +231,16 @@ class PlnParse:
self.strings = dict() self.strings = dict()
self.connections = list() self.connections = list()
self.f.seek(0x00)
self.version, = unpack("<H", self.f.read(2))
""" """
pos type description pos type description
0x00 ushort version 0x00 ushort version
""" """
self.f.seek(0x00)
debug(1, "%08x: read %d bytes for version", self.f.tell(), 2)
self.version, = unpack("<H", self.f.read(2))
if self.version != 5: if self.version != 5:
raise IOError, "unknown version: %d"%self.version raise IOError, "unknown version: %d"%self.version
self.f.seek(0x02)
start_station, u1, sX, sY = unpack("<H3I", self.f.read(14))
""" """
pos type description pos type description
0x02 ushort string reference to start station name 0x02 ushort string reference to start station name
@ -243,9 +248,11 @@ class PlnParse:
0x08 uint longitude of start station 0x08 uint longitude of start station
0x0C uint latitude of start station 0x0C uint latitude of start station
""" """
self.f.seek(0x02)
debug(1, "%08x: read %d bytes for start station, unknown, longitude and latitude", self.f.tell(), 14)
start_station, u1, sX, sY = unpack("<H3I", self.f.read(14))
debug(2, "\tstart_station: %d, u1: %d, sX: %d, sY: %d", start_station, u1, sX, sY)
self.f.seek(0x10)
end_station, u1, eX, eY = unpack("<H3I", self.f.read(14))
""" """
pos type description pos type description
0x10 ushort string reference to end station name 0x10 ushort string reference to end station name
@ -253,23 +260,30 @@ class PlnParse:
0x16 uint longitude of end station 0x16 uint longitude of end station
0x1A uint latitude of end station 0x1A uint latitude of end station
""" """
self.f.seek(0x10)
debug(1, "%08x: read %d bytes for end station, unknown, longitude and latitude", self.f.tell(), 14)
end_station, u1, eX, eY = unpack("<H3I", self.f.read(14))
debug(2, "\tend_station: %d, u1: %d, eX: %d, eY: %d", end_station, u1, eX, eY)
self.f.seek(0x1e)
number_of_conn, self.frequencies_offset, self.strings_offset = unpack("<HII", self.f.read(10))
""" """
pos type description pos type description
0x1e ushort number of connections found 0x1e ushort number of connections found
0x20 uint position of connection frequency data 0x20 uint position of connection frequency data
0x24 uint position of string block 0x24 uint position of string block
""" """
#print "number_of_conn: %d, frequencies_offset: %d, strings_offset: %d"%(number_of_conn, self.frequencies_offset, self.strings_offset) self.f.seek(0x1e)
debug(1, "%08x: read %d bytes for number of connections, frequency offset and string offset", self.f.tell(), 10)
number_of_conn, self.frequencies_offset, self.strings_offset = unpack("<HII", self.f.read(10))
debug(2, "\tnumber_of_conn: %d, frequencies_offset: %d, strings_offset: %d", number_of_conn, self.frequencies_offset, self.strings_offset)
debug(3, "\t\thex(frequencies_offset) = %08x", self.frequencies_offset)
debug(3, "\t\thex(strings_offset) = %08x", self.strings_offset)
#now that we read the string_offset, get the station names #now that we read the string_offset, get the station names
self.start_station = {"name":self.get_string(start_station), "X":sX, "Y":sY} self.start_station = {"name":self.get_string(start_station), "X":sX, "Y":sY}
self.end_station = {"name":self.get_string(end_station), "X":eX, "Y":eY} self.end_station = {"name":self.get_string(end_station), "X":eX, "Y":eY}
debug(3, "\t\tget_string(start_station) = %s", self.get_string(start_station))
debug(3, "\t\tget_string(end_station) = %s", self.get_string(end_station))
self.f.seek(0x28)
timetable_begin, timetable_end, today, timetable_remaining = unpack("<4H", self.f.read(8))
""" """
pos type description pos type description
0x28 ushort begin date of current timetable version 0x28 ushort begin date of current timetable version
@ -277,48 +291,61 @@ class PlnParse:
0x2c ushort date of query 0x2c ushort date of query
0x2e ushort remaining days in current timetable version 0x2e ushort remaining days in current timetable version
""" """
self.f.seek(0x28)
debug(1, "%08x: read %d bytes for dates of beginning, ending and remaining days of the current timetable", self.f.tell(), 8)
timetable_begin, timetable_end, today, timetable_remaining = unpack("<4H", self.f.read(8))
self.timetable_info = { self.timetable_info = {
"timetable_begin":self.parse_date(timetable_begin), "timetable_begin":self.parse_date(timetable_begin),
"timetable_end":self.parse_date(timetable_end), "timetable_end":self.parse_date(timetable_end),
"today":self.parse_date(today), "today":self.parse_date(today),
"timetable_remaining":timetable_remaining} "timetable_remaining":timetable_remaining}
debug(2, "\ttimetable_begin: %d, timetable_end: %d, today: %d, timetable_remaining: %d", timetable_begin, timetable_end, today, timetable_remaining)
self.f.seek(0x30) self.f.seek(0x30)
#print "unknown string: %s"%self.f.read(6) debug(1, "%08x: read %d bytes for unknown string", self.f.tell(), 6)
debug(2, "\tunknown string: %s", self.f.read(6))
self.f.seek(0x36)
self.cities_offset, self.train_props_offset \
= unpack("<II", self.f.read(8))
""" """
pos type description pos type description
0x36 uint position of city descriptions 0x36 uint position of city descriptions
0x3a uint position of train property data 0x3a uint position of train property data
""" """
self.f.seek(0x36)
debug(1, "%08x: read %d bytes for city and train props offset", self.f.tell(), 8)
self.cities_offset, self.train_props_offset = unpack("<II", self.f.read(8))
debug(2, "\tcities_offset: %d, train_props_offset: %d", self.cities_offset, self.train_props_offset)
#TODO: <begin big (46 bytes) ugly unknown section> #TODO: <begin big (46 bytes) ugly unknown section>
# a lot of unknown stuff which consists either of never changing data # a lot of mostly unknown stuff which consists either of never changing data
# or of zero-ed data # or of zero-ed data
# but seems to be not important for the rest as its size is static and # but seems not to be important as its size is static and
# no static information seems to be missing # no static information seems to be missing
# probably 46 bytes of obsolete data? # probably 46 bytes of obsolete data?
# u5_offset and u8_offset are only non-zero for partial pln data
self.f.seek(0x3e) self.f.seek(0x3e)
#print "cities_offset: %d, train_props_offset: %d"%(self.cities_offset, self.train_props_offset) debug(1, "%08x: read %d bytes for lots of mostly useless stuff", self.f.tell(), 12)
additional_offset1, u2, additional_offset2 \ additional_offset1, u1, additional_offset2 = unpack("<3I", self.f.read(12))
= unpack("<3I", self.f.read(12)) debug(2, "\tadditional_offset1: %d, u1: %d, additional_offset2: %d", additional_offset1, u1, additional_offset2)
#print "additional_offset1: %d, u2: %d, additional_offset2: %d"%(additional_offset1, u2, additional_offset2) debug(3, "\t\thex(additional_offset1) = %08x", additional_offset1)
debug(3, "\t\thex(additional_offset2) = %08x", additional_offset2)
self.f.seek(additional_offset1) self.f.seek(additional_offset1)
debug(1, "%08x: read %d bytes for some unknown", self.f.tell(), 2)
u1, = unpack("<H", self.f.read(2)) u1, = unpack("<H", self.f.read(2))
#print "u1: %d"%u1 debug(2, "\tu1: %d", u1)
self.f.seek(additional_offset2) self.f.seek(additional_offset2)
u1, u2, u3, request_id, u5_offset, u6, u7, u8_offset, u9, u10, u11, u12 \ debug(1, "%08x: read %d bytes for a huge bunch of unknowns", self.f.tell(), 32)
= unpack("<IIHHIHHI4H", self.f.read(32)) u1, u2, request_number, request_id, u5_offset, u6, products, u8_offset, u9, u10, u11, u12 = unpack("<IIHHIHHI4H", self.f.read(32))
#print "u1: %d, u2: %d, u3: %d, request_id: %s, u5_offset: %d, u6: %d, u7: %s, u8_offset: %d, u9: %d, u10: %d, u11: %d, u12: %d"%(u1, u2, u3, self.get_string(request_id), u5_offset, u6, self.get_string(u7), u8_offset, u9, u10, u11, u12) debug(2, "\tu1: %d, u2: %d, request_number: %d, request_id: %d, u5_offset: %d, u6: %d, products: %d, u8_offset: %d, u9: %d, u10: %d, u11: %d, u12: %d", u1, u2, request_number, request_id, u5_offset, u6, products, u8_offset, u9, u10, u11, u12)
debug(3, "\t\tget_string(request_id) = %s", self.get_string(request_id))
debug(3, "\t\tget_string(products) = %s", self.get_string(products))
debug(3, "\t\thex(u5_offset) = %08x", u5_offset)
debug(3, "\t\thex(u8_offset) = %08x", u8_offset)
# the only useful stuff: # the only useful stuff:
self.reqest_id = self.get_string(request_id) self.reqest_id = self.get_string(request_id)
self.products = self.parse_products(self.get_string(u7)) self.products = self.parse_products(self.get_string(products))
#TODO: </end big ugly unknown section> #TODO: </end big ugly unknown section>
for i in xrange(number_of_conn): for i in xrange(number_of_conn):
@ -399,7 +426,10 @@ class PlnParse:
512 => 5:12 512 => 5:12
""" """
t = "%03d"%t t = "%03d"%t
return time(hour=int(t[:-2]), minute=int(t[-2:])) hour, minute = int(t[:-2]), int(t[-2:])
# TODO: what to do with hour>=24 ?
hour %= 24
return time(hour, minute)
def parse_date(self, d): def parse_date(self, d):
""" """
@ -485,9 +515,8 @@ a = PlnParse(f)
#def bin(i): #def bin(i):
# return "".join(str((i >> y) & 1) for y in range(16-1, -1, -1)) # return "".join(str((i >> y) & 1) for y in range(16-1, -1, -1))
#print a.timetable_info #print a.timetable_info
from pprint import pprint
for conn in a.connections: for conn in a.connections:
pprint(conn) print conn
#for conn in a.connections: #for conn in a.connections:
# print "\t".join([conn["freq"][0], bin(conn["freq"][1]), bin(conn["freq"][2]), bin(conn["freq"][3])]) # print "\t".join([conn["freq"][0], bin(conn["freq"][1]), bin(conn["freq"][2]), bin(conn["freq"][3])])
#for conn in a.connections: #for conn in a.connections: