Hallo zusammen, ich hab ein kleines C-Programm geschrieben das eine Binärdatei verändern/anpassen soll. Leider liegt die Datei auf einem DOS Rechner und wenn möglich möchte ich das Programm auch dort ausführen und nicht jedesmal die Datei auf ein 32Bit System kopieren. Denn da liegt mein Problem, das kompilieren für ein 32Bit System klappt wunderbar, aber ich bekomm es nicht hin ein 16Bit Binary zu erzeugen. Der Digital Mars C Compiler[0] sollte das laut deren Webseite können, aber ich bin wohl zu blöd dazu das hinzubekommen. Kann mir jemand sagen was ich tun muss um ein DOS Program zu erzeugen? Besten Dank im Voraus P.S. Das Programm ist wirklich winzig und ich verwende nur die <stdio.h> [0]http://www.digitalmars.com/
google liefert http://personal.ee.surrey.ac.uk/Personal/R.Bowden/C/dos-gcc/ keine ahnung ob die links gehen.
Hi Peter, werd das mal versuchen. Dachte eigentlich eher an ein Cross-Compiler, aber wenns nicht anderst geht werd ich eben auf der DOS-Möhre compilieren :/
Elias B. schrieb: > Hi Peter, > > werd das mal versuchen. > Dachte eigentlich eher an ein Cross-Compiler, aber wenns nicht anderst > geht werd ich eben auf der DOS-Möhre compilieren :/ der compiler sollte auch unter Win7 in einer DoxBox laufen. Dann kannst du auch dort compilieren
Du könntest auch OpenWatcom (http://www.openwatcom.org/index.php/Main_Page) oder TurboC (http://edn.embarcadero.com/article/20841) versuchen...
Hi, ich hab mehr oder weniger erfolg gehabt. Virtual Box + DJGPP's GCC haben mir eine exe gebaut die unter DOS läuft. Leider nur auf der Virtualbox wo ich's gebaut hab. Auf der anderen bekomm ich "Load error: no DPMI - Get csdpmi*.zip" Das Zip war Teil der Installation für den GCC von hier: http://personal.ee.surrey.ac.uk/Personal/R.Bowden/C/dos-gcc/ Kann mir jemand sagen wie ich das so compilieren kannd amit das auch läuft wenn das Zip file nicht rum ist? Danke schon mal!
Ja schon, aber ich will nur ne kleine exe die man auf den Zielrechner kopieren kann um sie dann dort zu benutzen. Ohne das man da noch so ein leidigen Extender installieren muss.
Elias B. schrieb: > Ja schon, aber ich will nur ne kleine exe die man auf den Zielrechner > kopieren kann um sie dann dort zu benutzen. Dann besorgst du dir am besten einen echten DOS-Compiler wie Turbo-C, die gibts sogar umsonst. Da die Compiler auch nur Konsolenprogramme sind oder bestenfalls ANSII-Grafik benutzen, sollten sie auch unter Windows laufen, notfalls mit Hilfe von DosBox (dem Programm, nicht der Eingabeaufforderung). Ich habe mir mal vorsichtshalber bei Borland ein Turbo-C 2.01 von 1989 runtergeladen, und Borland C mit 1m Handbuch und auf ca. 30 Disketten hatte ich auch mal, aber die habe ich glaube ich entsorgt. Gruss Reinhard
Hi, hab den Borland C Compiler 2.01 heruntergeladen und installiert. Leider bekomm ich einen haufen Fehler wenn ich compilieren will :/ Weisst du welchen C Standart damals benutzt wurde, bzw wo man handbüch herbekommen könnte?
> Ohne das man da noch so ein leidigen Extender installieren muss.
Das ist doch auch nur eine .exe
Elias B. schrieb: > Weisst du welchen C Standart damals benutzt wurde, bzw wo man handbüch > herbekommen könnte? Such mal nach Kernighan & Ritchie, dem Urahn aller C-Bücher. Da steht sicher nichts zu Modernes drin. Bei Google gefunden: http://de.scribd.com/doc/35398818/Turbo-C-Users-Guide-1987 Gruss Reinhard
Elias B. schrieb: > Leider bekomm ich einen haufen Fehler wenn ich compilieren will :/ zeig doch mal ein paar der melden. Vermutlich sind nicht alles variablen als erstes in der funktion deklariert.
Elias B. schrieb: > Weisst du welchen C Standart damals benutzt wurde. ... Einer mit einem weiche "t" ;-)
@Elias Ich habe bei mir "D-Fend Reloaded" laufen (Fenster 7). Ein paar olle 16-Bit-Clipperanwendungen joggen da problemlos. Warum nicht ein betagter C-Compiler? Dazu installierst Du dir noch 'nen Notepad++-Editor oder was ähnliches und so kannst Du halbwegs komfortabel, unter Fenster, arbeiten. Die meisten Compiler sind ja sowieso Kommandozeilenorientiert.
Irgend einen Uralt-Compiler, und den unter DOSbox laufen lassen. So bekam ich vor kurzem meinen Uralt-Assembler mit Simulator von 1991 auch wieder zum laufen. Gestern noch einen neuen 8048-Simulator mit Assembler für meine über 30 Jahre alten Retro-Bausteine. Alles auf meinem Vista-Notebook. Bei einem alten Turbo-C-Compiler gab es ein Einstellungsmenü. Darin konnte man einstellen, ob das Programm auf einem 8086 oder 80286 oder 80386 laufen sollte, und ob mit oder ohne Coprozessor. Die Coprozessoren hießen immer xx87.
@Elias
>Leider bekomm ich einen haufen Fehler wenn ich compilieren will
Das was heute vor dem Anwender versteckt wird, musst Du meist zu Fuß
erledigen.
So ein Compiler benötigt einen ganzen Sack voll Umgebungsvariablen um
sich im System auszukennen.
So zum Bleistift: Wo sind die Bibliotheken, wo sind die
Standart-Header-Files?
Früher hat man das in eine Batch-Datei gepackt, die einmalig aufgerufen
wurde oder im Systemautomatismus versteckt war.
Also jede Menge: SET …
Elias B. schrieb: > Der Digital Mars C Compiler[0] sollte das laut deren Webseite können, > aber ich bin wohl zu blöd dazu das hinzubekommen. dmc -msd program.c
amateur schrieb: > So ein Compiler benötigt einen ganzen Sack voll Umgebungsvariablen um > sich im System auszukennen. Setzt DMC alles selber, ausgehend von seinem EXE-Pfad.
@Elias An der Stelle, an der Du z.B. "dmc -msd program.c" eingeben würdest, einfach mal den Befehl "set" eingeben. Dann werden die aktuellen Einstellungen ausgegeben.
Wenn DMC nicht schon im Pfad drin ist, dann in der Kommandozeile vorher: path c:\dm\bin;%path% Mal angenommen, dass du den Kram nach c:\dm entpackt hast. Mehr ist eigentlich nicht nötig.
Hallo Elias, probier es mal mit TURBO C++ V. 1.01 http://edn.embarcadero.com/museum/antiquesoftware Ob Du es unter Win7/8 noch zum Laufen bekommst, weiß ich nicht. Aber für Windows XP sollte es noch funktionieren. Im Zweifel kannst Du ja auch den Quelltext Deines Mini-Programms posten, und jemand aus dem Forum versucht, es zu kompilieren. Viele Grüße Michael
Elias B. schrieb: > Leider bekomm ich einen haufen Fehler wenn ich compilieren will Welche Fehler bekommst du denn?
Zäumen wir das Pferd mal von hinten auf: warum nicht eine andere DOS-Version verwenden? :P Bootdiskette mit z.B. Freedos und einem passenden Extender (siehe auch Wikipedia zu FreeDOS)... Sofern der Rechner von CD booten kann, kannst du auch alles auf eine CD-RW kloppen.
Michael Lenz (hochbett) schrieb: > Hallo Elias, > probier es mal mit TURBO C++ V. 1.01 > http://edn.embarcadero.com/museum/antiquesoftware Die rücken doch nichts raus ohne Registrierung (nicht mal Uralt-Software). Wahrscheinlich geben sie in 100 Jahren mal TC 3.0 frei. Man findet im Netz zwar grundsätzlich alles wonach man zeitaufwändig sucht, aber leider meistens aus unseriösen Quellen, die einem erst mal eine unbekannte EXE zum Dl anbieten. Vorsicht Virenschleuder! Aber schau mal hier http://www.retroarchive.org/dos/lang/index.html
Adler schrieb: > Die rücken doch nichts raus ohne Registrierung (nicht mal > Uralt-Software). Wahrscheinlich geben sie in 100 Jahren mal TC 3.0 frei. Vielleicht hat der eine oder andere die Floppies noch nicht entsorgt. Dann verlagert sich das Problem darauf, 5,25" Floppies zu lesen. ;-)
A. K. (prx) schrieb: Adler schrieb: >> Die rücken doch nichts raus ohne Registrierung (nicht mal >> Uralt-Software). Wahrscheinlich geben sie in 100 Jahren mal TC 3.0 frei. > Vielleicht hat der eine oder andere die Floppies noch nicht entsorgt. > Dann verlagert sich das Problem darauf, 5,25" Floppies zu lesen. ;-) Also mein Borland Turbo C++ 3.0 ist auf 3,5" Diskette (wo hab ich die verdammten Dinger eigentlich??). Das 5,25" kann also beruhigt weiter in der Ablage vor sich stauben. ;-) Die alten Versionen zu installieren kann dennoch etwas hakelig sein. Ich meine aber alles in ein Verzeichnis kopiert (Disk1) sollte es gehen. Oder man nimmt einfach seinen alten TC Ordner (der irgendwo auf einer Uralt-CD gezippt archiviert wurde anno irgendwann) und probierts damit in der DOS-Box. Dann braucht man nix groß zu installieren. Wobei du doch weiter oben selber geschrieben hast, wie es mit dem DMC auch klappen sollte.
Adler schrieb: > Die rücken doch nichts raus ohne Registrierung (nicht mal > Uralt-Software). Ja und, die Registrierung ist kostenfrei. Und einem geschenkten Gaul ...
Guten Morgen, also Danke erst mal für die Zahlreichen Antworten! das ist der code:
1 | #include <stdio.h> |
2 | |
3 | int main() { |
4 | |
5 | FILE *file; |
6 | unsigned int day = 0; |
7 | unsigned int month = 0; |
8 | unsigned int year = 0; |
9 | unsigned char answer = 0; |
10 | |
11 | // Veruschen das BIN.CUT File zu oeffnen
|
12 | file = fopen("BIN.CUT","r+b"); |
13 | if(!file) { |
14 | file = fopen("C:\\DATA\\BIN.CUT","r+b"); |
15 | }
|
16 | if(!file) { |
17 | fprintf(stderr, "Fehler: BIN.CUT kann nicht geoeffnet werden!\n"); |
18 | return 1; |
19 | }
|
20 | |
21 | // Die ersten 18 Bytes ueberspringen
|
22 | fseek(file, 18 , SEEK_SET); |
23 | |
24 | // Das momentan gesetzte Datum lesen
|
25 | day = fgetc(file) | (fgetc(file) << 8); |
26 | month = fgetc(file) | (fgetc(file) << 8); |
27 | year = fgetc(file) | (fgetc(file) << 8); |
28 | |
29 | printf("Das Datum steht momentan auf %d.%d.%d\n",day,month,year); |
30 | |
31 | // Pruefen ob der Timer bereits aktiviert wurde
|
32 | if((fgetc(file) | (fgetc(file) << 8)) == 1) { |
33 | printf("Der Timer ist bereits aktiv.\n\n"); |
34 | }
|
35 | else { |
36 | printf("Der Timer ist noch nicht aktiviert worden.\n\n"); |
37 | }
|
38 | |
39 | printf("Datum mit dem 01.01.2100 ueberschreiben? [j/n]: "); |
40 | scanf("%c",&answer); |
41 | if(answer != 0x6A && answer != 0x4A) { |
42 | return 1; |
43 | }
|
44 | |
45 | // Die ersten 18 Bytes ueberspringen
|
46 | fseek(file, 18 , SEEK_SET); |
47 | |
48 | // Tag 1 eintragen
|
49 | fputc(0x01, file); |
50 | fputc(0x00, file); |
51 | // Monat 1 eintragen
|
52 | fputc(0x01, file); |
53 | fputc(0x00, file); |
54 | // Jahr 2100 eintragen
|
55 | fputc((0x0834 & 0xff), file); |
56 | fputc(((0x0834 >> 8) & 0xff), file); |
57 | // Den Timer deaktivieren
|
58 | fputc(0x00, file); |
59 | fputc(0x00, file); |
60 | |
61 | // Die ersten 18 Bytes ueberspringen
|
62 | fseek(file, 18 , SEEK_SET); |
63 | |
64 | // Das momentan gesetzte Datum lesen
|
65 | day = fgetc(file) | (fgetc(file) << 8); |
66 | month = fgetc(file) | (fgetc(file) << 8); |
67 | year = fgetc(file) | (fgetc(file) << 8); |
68 | |
69 | printf("\nDer Timer steht jetzt auf %d.%d.%d\n",day,month,year); |
70 | |
71 | // Pruefen ob der Timer bereits aktiviert wurde
|
72 | if((fgetc(file) | (fgetc(file) << 8)) == 1) { |
73 | printf("Der Timer ist immer noch aktiv.\n"); |
74 | }
|
75 | else { |
76 | printf("Der Timer ist deaktiviert worden.\n"); |
77 | }
|
78 | return 0; |
79 | }
|
und das der output com Borland Compiler:
1 | Turbo C Version 2.01 Copyright (c) 1987, 1988 Borland International |
2 | BIN.C: |
3 | Error BIN.C 5: Undefined symbol 'FILE' in function main |
4 | Error BIN.C 5: Undefined symbol 'file' in function main |
5 | Warning BIN.C 5: Code has no effect in function main |
6 | Error BIN.C 6: Expression syntax in function main |
7 | Error BIN.C 7: Expression syntax in function main |
8 | Error BIN.C 8: Expression syntax in function main |
9 | Error BIN.C 9: Expression syntax in function main |
10 | Error BIN.C 11: Expression syntax in function main |
11 | Error BIN.C 17: Undefined symbol 'stderr' in function main |
12 | Error BIN.C 21: Expression syntax in function main |
13 | Error BIN.C 24: Expression syntax in function main |
14 | Error BIN.C 26: Undefined symbol 'month' in function main |
15 | Error BIN.C 27: Undefined symbol 'year' in function main |
16 | Error BIN.C 29: Undefined symbol 'day' in function main |
17 | Error BIN.C 31: Expression syntax in function main |
18 | Error BIN.C 40: Undefined symbol 'answer' in function main |
19 | Error BIN.C 45: Expression syntax in function main |
20 | Error BIN.C 48: Expression syntax in function main |
21 | Error BIN.C 51: Expression syntax in function main |
22 | Error BIN.C 54: Expression syntax in function main |
23 | Error BIN.C 57: Expression syntax in function main |
24 | Error BIN.C 61: Expression syntax in function main |
25 | Error BIN.C 64: Expression syntax in function main |
26 | Error BIN.C 71: Expression syntax in function main |
27 | *** 23 errors in Compile *** |
28 | |
29 | |
30 | Available memory 386810 |
Vielleicht wird ja einer schlau draus !?
Problemlos (-v2 damit du auch was davon siehst):
1 | [D:\Temp]dmc -v2 -msd f1.c |
2 | scppn -v2 -msd f1.c |
3 | Digital Mars C/C++ Compiler Version 8.33.13n |
4 | Copyright (C) Digital Mars 2000-2003. All Rights Reserved. |
5 | Written by Walter Bright |
6 | www.digitalmars.com |
7 | 'f1.c' |
8 | 'c:\dm\include\stdio.h' |
9 | main |
10 | C/C++ Compiler complete. Code: 0x0226 (550) Data: 0x015a (346) Time: 0.00 seconds |
11 | |
12 | link f1/noi; |
XP, also ausführbar:
1 | [D:\Temp]f1 |
2 | Fehler: BIN.CUT kann nicht geoeffnet werden! |
Offensichtlich ignoriert dein Turbo-C das Include-Statement, oder kriegt ein effektiv leeres stdio.h. Der Rest folgt daraus. Vielleicht fehlt ihm irgendeine Env-Variable, die in DOS vorhanden aber in Windows nicht vorhanden ist (sowas wie #ifdef DOS ... im stdio.h).
Elias B. schrieb: > #include <stdio.h> ... > Error BIN.C 5: Undefined symbol 'FILE' in function main Komisch. In der zu TC2.01 gehörenden /stdio.h/ ist FILE definiert. Sicher, daß bei Dir der include-Pfad korrekt gesetzt ist?
Wenn er das File nicht gefunden hätte, hätte er es gesagt. Die Frage ist also eher, ob er das richtige File gefunden hat, oder dessen Inhalt aufgrund einer abgewiesenen #ifdef Klammer ignorierte.
Elias B. schrieb: > Guten Morgen, > > also Danke erst mal für die Zahlreichen Antworten! > > das ist der code: > > [c] > #include <stdio.h> > ... > und das der output com Borland Compiler: > > [c] > Turbo C Version 2.01 Copyright (c) 1987, 1988 Borland International > BIN.C: > Error BIN.C 5: Undefined symbol 'FILE' in function main > Error BIN.C 5: Undefined symbol 'file' in function main > Warning BIN.C 5: Code has no effect in function main > ... > > Vielleicht wird ja einer schlau draus !? Änder mal deine C++ Kommentare // (die gab es damals nämlich noch nicht für C) in C89 Kommentare /* */, dann kompiliert das auch.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.