C Programm für MS DOS compilieren

OP #3183789
Lesenswert?

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/
Gast #3183802
Lesenswert?

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
OP #3184112
Lesenswert?

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!
Gast #3184264
Lesenswert?

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
Gast #3184388
Lesenswert?

@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.
Gast #3184391
Lesenswert?

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.
Gast #3184461
Lesenswert?

@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 …
Gast #3184729
Lesenswert?

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.
Gast #3184816
Lesenswert?

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
Gast #3184837
Lesenswert?

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.
OP #3185060
Lesenswert?

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 !?
#3185282
Lesenswert?

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!
Gast #3186535
Lesenswert?

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.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren