Wracając z zaświatów postanowiłem umieścić patcha do dirt'a, który umożliwia kompilację i poprawne jego działanie na architekturach x64. Decyzją było to, że to już trzeci patch do tego martwego softu - i jak tu nie lubić open source? :)
Poprzednie patche możesz znaleźć tutaj i tutaj, jednak trzeci patch zawiera już oba poprzednie. Tak więc należy ściągnąć oryginalny kod źródłowy ze oficjalnej strony dirt'a i...
- antek@hydra ~/dev/cpp $ aunpack dirt-1.0.0a25-source.zip
- (...)
- antek@hydra ~/dev/cpp $ cd dirt-1.0.0a25-source/
- antek@hydra ~/dev/cpp $ wget anadoxin.org/blog/files/u1/a1-dirtpatch3.diff
- antek@hydra ~/dev/cpp/dirt-1.0.0a25-source $ patch -p1 < a1-dirtpatch3.diff
- patching file bin2c.cpp
- patching file define.h
- patching file fish.cpp
- patching file misc.cpp
- patching file proxy.cpp
- patching file proxy.h
- patching file unix.cpp
- antek@hydra ~/dev/cpp/dirt-1.0.0a25-source $ make unix
Po wydaniu ostatniego polecenia powinna nastąpić kompilacja dirt'a i powstanie binarki dirt. :)
Patch poprawia błąd dotyczący funkcji exit w pliku bin2c.cpp - co było powodem błędu kompilacji, oraz umożliwia poprawne działanie na architekturze x64. Konkretnie, w kodzie znajduje się kilka deklaracji zmiennych oznaczonych specyfikatorami unsigned long. Autor dirta najwyraźniej odciukał swoje w czasach 16-bitowego DOS'a, ponieważ specyfikatorów tych używał dla zmiennych, które powinny być 32-bitowe. Dla normalnych środowisk wystarczy użyć int'a aby stworzyć zmienną 32bit (w DOS stworzy zmienną 16-bit) i to jest właśnie ta preferowana metoda... ponieważ long dla 64-bitów stworzy zmienną 64-bit, a int - 32-bit. Z tego powodu zaczęły rozjeżdżać się struktury, w efekcie program brał pod uwagę nie te offsety co trzeba ;).
Patch do pobrania możesz ściągnąć stąd.
