Diese Überprüfung ist eine Linuxlastige Scriptsammlung (works for me), welche ich noch nicht ins Repo eingepflegt habe,
da bisher niemand einen BCC hatte. Da sich das soeben geändert hat ist es nun an der Zeit das Ganze zu sortieren und hochzuladen.
Kleine Skizze:
Initial wird aus der SCHICKM.EXE mit ndisasm (nasm) der Code für die einzelnen Code-Segmente disassembliert und in einzelnen Dateien abgelegt. (./tools/disassemble.sh ist schon im Repo). Dazu muss SCHICKM.EXE im tools-Verzeichnis liegen.
Noch nicht im Repo ist folgende Toolchain:
Es wird Qemu und ein Festplattenimage mit FreeDOS und dem BCC benötigt.
Anschließend kann ich mit einem Script
Das ganze habe ich auch als commit-hook in mein lokales Repo integriert,
damit ich nicht aus versehen identischen Code kaputt mache.
Zur Frage mit SEG066.CPP:
Das ist nicht der Fehler, sondern eher ein Notbehelf, der gleichlangen Code erzeugt und das gleiche Resultat hat.
Das Problem liegt etwas tiefer und hängt damit zusammen ob der Compiler schon weiß, ob sich die aufgerufene Funktion
in der gleichen cpp-Datei befindet oder nicht.
Wenn er zum Zeitpunkt der Codeerzeugung nur der Funktionskopf bekannt ist z.B. aus einer Vorausdeklaration aus der Cpp-Datei und/oder aus einem Header, und die Argumenttypen nicht immer übereinstimmen kann soetwas schonmal vorkommen.
Das könnte ich sicherlich mit noch etwas mehr Präprozessor-Magic lösen,
aber das hat auch noch etwas Zeit.
da bisher niemand einen BCC hatte. Da sich das soeben geändert hat ist es nun an der Zeit das Ganze zu sortieren und hochzuladen.
Kleine Skizze:
Initial wird aus der SCHICKM.EXE mit ndisasm (nasm) der Code für die einzelnen Code-Segmente disassembliert und in einzelnen Dateien abgelegt. (./tools/disassemble.sh ist schon im Repo). Dazu muss SCHICKM.EXE im tools-Verzeichnis liegen.
Noch nicht im Repo ist folgende Toolchain:
Es wird Qemu und ein Festplattenimage mit FreeDOS und dem BCC benötigt.
Anschließend kann ich mit einem Script
- alle cpp,h,*.bat Dateien im Verzeichnis auf das Image kopieren,
- die OBJ-Dateien erzeugen (Qemu),
- die OBJ-Dateien vom zurückkopieren,
- den Binärcode extrahieren,
- mit ndisasm disassemblieren und
- zweispaltig mit diff Vergleichen.
Das ganze habe ich auch als commit-hook in mein lokales Repo integriert,
damit ich nicht aus versehen identischen Code kaputt mache.
Zur Frage mit SEG066.CPP:
Das ist nicht der Fehler, sondern eher ein Notbehelf, der gleichlangen Code erzeugt und das gleiche Resultat hat.
Das Problem liegt etwas tiefer und hängt damit zusammen ob der Compiler schon weiß, ob sich die aufgerufene Funktion
in der gleichen cpp-Datei befindet oder nicht.
Wenn er zum Zeitpunkt der Codeerzeugung nur der Funktionskopf bekannt ist z.B. aus einer Vorausdeklaration aus der Cpp-Datei und/oder aus einem Header, und die Argumenttypen nicht immer übereinstimmen kann soetwas schonmal vorkommen.
Das könnte ich sicherlich mit noch etwas mehr Präprozessor-Magic lösen,
aber das hat auch noch etwas Zeit.