Hallo , guten Tag.
Wie kann man bitte in eine Array schreiben von PDS-Basic mit Turbo C 2.0
Es sollen bitte die ersten 10 Werte (Int) ersetzt werden von Turbo C.
Ich übergebe an Turbo C die Segment und Ofs-Addr.
Danke.
Basic :
-Jetzt wieder tc 2, letzter post war noch tc 3?
-long als seg und ofs macht keinen sinn, sind jeweils doch nur 16bit
-MK_FP hast du doch schon verwendet?
int* array;
...
array = (int*)MK_FP(seg,ofs);
....
array[0] ist dann dein 1. Eintrag
Btw: wenn es geht immer von 0 Anfangen in den Arrays, sonst macht man
kleine blöde Fehler
Peter B. schrieb:> Danke für die Info.>> PDS kennt kein Byte-Format.> Es fängt bei Int an.
Was willst du denn mit den 32k machen?
grafikspeicherkopie wie in den letzten tests?
Brauche ich später für die Grafik.
Damit es erstmal funktioniert nehme ich erstmal 1000.
Zur Zeit kommt unten die Fehlermeldung.
Was muss bitte in der linker.cmd evtl geändert werden oder anders wo?
Es fehlt ja bestimmt irgendeine LIb die ich nicht kenne für die _MK_FP
Letztes mal wurde eine cs.lib eingebaut für LONG die ich nicht kannte.
Danke.
Build.bat :
-------------------------
BC xarray xarray xarray
tcc -c array.c
link @linker.cmd
--------------------------
linker.cmd :
---------------------------
xarray.obj +
array.obj
xarray.exe
xarray.lst
cs.lib +
brt71enr.lib
--------------------------
PDS-Basic: xarray.bas
1. Ist es jetzt TC 2 oder TC 3?
2. Warum faengt dein x in c bei 1 an und immer noch dieses <= 10
Dein 1. Eintrag im array wird dadurch ignoriert
3. MK_FP ist ein Macro also keine Funktion die aus einer obj kommt
4. Du leitest die Ausgabe von build.bat immer noch nicht mit
Build.bat > out.txt 2>&1 in eine Textdatei um sondern postest wieder
Screenshots
5. Immer noch keine vollstaendigen c und bas Dateien im Anhang
6. Deiner c funktion fehlt der rueckgabe typ, zumindest void
6 Punkte ergeben auch 6 antworten
cppbert schrieb:> 2. Warum faengt dein x in c bei 1 an und immer noch dieses <= 10
Das wird wohl daran liegen, dass manche Arrays nullbasiert und andere
wiederum 1-basiert anfangen. Man kann auch Speicherstellen außerhalb des
definierten Bereichs verwenden, z.B. eine [11] nehmen, obwohl vlt. nur
[10] definiert sind. Wichtig ist dann nur, dass es passieren kann, dass
der letzte Wert dann auch falsch sein kann.
Es gibt eben halt auch Sprachen, die 1-basiert bei der Arrayindizierung
beginnen.
cppbert schrieb:> -Jetzt wieder tc 2, letzter post war noch tc 3?
Turbo C - das kenn ich noch von früher. Gibts ja ganricht mehr heute.
- TC 2
- auf 0 gändert
- auf Void geändert ( weil keine Funktion)
- #include <dos.h> eingebaut
Jetzt funktioniert es . die dos.h hat gefehlt.
Ich habe die .h angefangen zu durchsuchen und bin bei der dos.h
gelandet.
Ich suche erstmal eine PDF von Turbo 2.01 um zumindest die .h zu finden.
Danke.
Peter B. schrieb:> - auf Void geändert ( weil keine Funktion)> - #include <dos.h> eingebaut
Wie konnte der c code den kompilieren ohne die Aenderungen?
Deswegen IMMER die umgeleitete build.bat Ausgabe mit anhaengen
Peter B. schrieb:> Die Fehlermeldung kam erst nachdem ich die Exe gestartet hatte.
Das macht absolut keinen Sinn was du schreibst, Die Fehlermeldung in
deinem Screenshot kam doch vom Linker also bevor die exe existiert
> "Build.bat > out.txt" funktioniert nicht in der DosBox.
Was bedeutet "funktioniert nicht" ganz genau
Warum funktioniert es bei mir? Und ohne 2>&1 macht es auch keinen Sinn
Sonst fehlen die Fehlerausgaben in der Textdatei oder die Datei ist
einfach leer
cppbert schrieb:> Das macht absolut keinen Sinn was du schreibst, Die Fehlermeldung in> deinem Screenshot kam doch vom Linker also bevor die exe existiert
Und dein c code war gar nicht kompilierbar, dos.h hat gefehlt, schreib
lieber nichts als sachen die total verwirren oder sogar falsch sind
Wenn ich die dos.h rausnehme kommt wieder meine Fehlermeldung von oben.
Man muss nur auf den Zahlenwert des Array achten bei C und PDS,
dementsprechend kommen die Werte mit Print:
PDS 7.1 :
DIM Array(1000) Single
DIM Array&(1000) Long
DIM Array%(1000) Integer
usw...
Peter B. schrieb:> Wenn ich die dos.h rausnehme kommt wieder meine Fehlermeldung von oben.
Wie kann dein tcc ohne die dos.h fehlerfrei kompilieren, die
macrodefinition fehlt dann doch komplett, könnte sein das der tcc da ein
bisschen magie walten laesst
Du hast immer nocht nicht geschrieben warum build.bat > out.txt 2>&1
nicht funktioniert?
--------------------------
Wie kann dein tcc ohne die dos.h fehlerfrei kompilieren, die
--------------------------
??? Weiß ich nicht. Erst beim starten von der Exe kommt die
Bildfehlermeldung. Vielleicht liegt es an der DosBox.
Werden morgen mal auf meinen alten Dos-Rechner testen.
Das out.txt hatte ich nicht gefunden weil es als Datei : &1
abgespeichert wird.
Nun das ist doch eigendlich offensichtlich. TC compiliert auch dann wenn
die include Datei fehlt. Es gibt aber Warnungen bezüglich nicht
deklarierter Funktion.
TC setzt einfach MK_FP auf extern. Der Linker sucht dann die Funktion
_MK_FP. Kann man gut daran erkennen weil der Unterstrich da ist.
Diese Funktion kann's aber nicht geben da MK_FP ein Makro ist.
Die Warnungen sieht er halt nicht ein direkter Aufruf tcc -c array.c
würde das zeigen.
Alternativ könnte man die Meldungen in der Batch auch in ein c.log
umleiten
Thomas Z. schrieb:> Die Warnungen sieht er halt nicht ein direkter Aufruf tcc -c array.c> würde das zeigen.
Sehe ich auch so
> Alternativ könnte man die Meldungen in der Batch auch in ein c.log> umleiten
Die stderr umleitung klappt bei ihm nicht
cppbert schrieb:> Thomas Z. schrieb:>> Die Warnungen sieht er halt nicht ein direkter Aufruf tcc -c array.c>> würde das zeigen.>> Sehe ich auch so>>> Alternativ könnte man die Meldungen in der Batch auch in ein c.log>> umleiten>> Die stderr umleitung klappt bei ihm nicht
ich dachte das ging mal?
2>&1 geht nicht, 2> ist einfach nur stdout
-noconsole schreibt auch keines stderr, stdout bei mir
Eine eigene Frage?
Dieser Thread ist über 6 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.