Hallo Leute,
ich habe eine C-Datei, die ich aber nicht nutzen kann, weil ich kein C
kann. Komme aus der Delphi/Basic-Ecke.
Nun ich suche ich einen "Übersetzer". Natürlich nicht umsonst.
Wer kann zb sowas
qDebug()<<"(WARN) expected tag but did not get one! d="<<d;
13
framelength=0;
14
}
15
break;
soweit kommentieren, daß verständlich ist?
Sind einige Dutzend Zeilen.
Ist ein Programm zum Auslesen und Umwandeln von Daten aus
Datenübertragung per Schnittstelle.
Danke :)
Hi,
dass ist garantiert kein C sondern C++!
Also nur ausschnitt kommentieren funkt nicht, da was ausen rum ist die
Funktion verrät.
Jetzt zum Helfen: (es gibt genau 4 Treffer bei google wenn ich nach:
MD_SERIALOUT_BINARY_TAG suche.)
http://multidisplay.googlecode.com/svn-history/r460/trunk/mUI/src/MdSerialComBinary.cpp
Es geht anscheinend um eine Statemachine.
Im Zustand: MD_STATUS_WAITING_FOR_TAG
Wir abgefragt ob d eins von MD_SERIALOUT_BINARY_TAG,
MD_SERIALOUT_BINARY_BOOSTPID_TAG, MD_SERIALOUT_BINARY_TAG_N75_DUTY_MAP,
MD_SERIALOUT_BINARY_TAG_N75_SETPOINT_MAP, MD_SERIALOUT_BINARY_TAG_ACK,
MD_SERIALOUT_BINARY_TAG_N75_PARAMS ist. Wenn das Zutrifft wird die
Framelength auf den Wert von d gesetzt und Objekt rcvData in das indexte
Byte d geschrieben. sdata wird derefenziert und dann aufs indexte
Element d geschrieben.
Index wird inkrementiert
Wenn d nicht in der Liste da oben ist wird eine Debug ausgabe generiert.
MfG
ich
Wäre es nicht sinnvoller du lässt es dir gleich in "Pascal" statt
"Deutsch" übersetzen?
Alles groß geschriebene solten Konstanten sein, such mal nach einem
"#define". "||" bedeutet "oder"
1
case blablub of
2
MD_STATUS_WAITING_FOR_TAG:
3
begin
4
if d in [TAG, DUTY, xyz] then
5
begin
6
framelength := d;
7
rcvData.asBytes[index] := d;
8
// Für den Pointer Krempel bräuchte man den Rest vom Code
9
inc(index);
10
11
end
12
else
13
begin
14
writeln("(WARN) ...");
15
framelength := 0;
16
end;
17
end;
18
end;
Mit dem Konstanten-Set bin ich mir grad nicht sicher. Wenn das nicht
geht nimm "if (d = a) or (d = b) then" wie auch im C-Code.
Ich glaube du hast nicht verstanden ich habs dir schon in Deutsch
übersetzt. Und zwar fast schon in reinem Prosa oder Hirn.
Wie oben schon stand lesen sollt man das noch, fast egal von Welcher
höheren Programmiersprache man kommt, sind ja keine Trinären Operatoren
oder so lustige spezial Dinge drin. das einzige knifflige ist
(*sdata)[index]. was aber nur ein Zeiger auf ein Array ist. Und ich hab
vergessen:
Wenn die If zutrifft geht die STatemachine in dne Zustand:
MD_STATUS_RECEIVING.
MfG
ich
In dem man mir einer email-Adresse gibt und alles weitere dann geklärt
wird. Ich glaube kaum, daß du dich hinsetzt und kostenlos ein paar
Hundert Zeilen übersetzt und Fragen dazu beantwortest, oder? :)
Mike Kr schrieb:> Sind einige Dutzend Zeilen.> Ist ein Programm zum Auslesen und Umwandeln von Daten aus> Datenübertragung per Schnittstelle.
Vielleicht ist es leichter, die gewünschte Funktionalität selbst in
Delphi umzusetzen?
Skyper schrieb:> ... das "qDebug()" läßt mich auf Qt schließen, was dann wiederum C++ mit> einschließt...
dafür muss man nicht über den QT Umweg denken
Peter II schrieb:> Skyper schrieb:>> ... das "qDebug()" läßt mich auf Qt schließen, was dann wiederum C++ mit>> einschließt...>> dafür muss man nicht über den QT Umweg denken>>
1
><<
2
>
>> ist c++ genug.
Naja... wer weiß, wie der restliche Code aussieht.
Möglicherweise ist er gespikt mit Funktionen aus Qt-Bibliotheken.
Insofern ist der Hinweis nicht verkehrt!
Peter II schrieb:> man könnte auch überlegen, aus dem C++ code eine dll zu machen und> diese kannst du dann von Delphi aus nutzen.
Das klappt ebenfalls nnur, wenn man C++ spricht.
Wieso stellst du nicht mal die komplette C-Datei hier rein und wir
versuchen es zusammen. Oder du stellst die C-Datei hier rein und jemand
einzelnes versucht es für einen Obulus. Oder muss man ne NDA
unterschreiben um dir zu helfen?
Marcus W. schrieb:> Wieso stellst du nicht mal die komplette C-Datei hier rein und wir> versuchen es zusammen.
Wie oben schon geschrieben wurde, ist das Qt, und das geht halt nur mit
C++.
Die Umsetzung des Nicht-Qt Teils ist dagegen trivial.
Peter II schrieb:> == ^ => = ^ :=
Das ist schon bald alles. Das sollte jeder Delphi-Programmierer
hinbekommen.
Oliver
Marcus W. schrieb:> Peter II schrieb:>> man könnte auch überlegen, aus dem C++ code eine dll zu machen und>> diese kannst du dann von Delphi aus nutzen.>> Das klappt ebenfalls nnur, wenn man C++ spricht.
andersrum. wenn es C ist, dann ist das DLL Interface viel einfacher. Bei
C++ müsste man sich überlegen ob man COM verwendet.
Peter II schrieb:> wenn es C ist, dann ist das DLL Interface viel einfacher.
Es ist fast schon trivial einfach, C++-Code mit einem C-Interface zu
versehen, so daß es keinen Grund gibt, COM einzusetzen.
Mike Kr schrieb:> @MarkBrandis Da bin ich ja dabei, nur leider existiert keine Doku mehr,> sondern "nur" der funktionierende Quellcode in C++
Ja. Und?
Wenn der Rest auch so aussieht, und ich hage da keinen grossen Zweifel,
dann ist der recht trivial zu lesen. Da muss ich ehrlich gesagt schon an
deinen Pascal/Delphi Fähigkeiten zweifeln, wenn dir das groß
SChwierigkeiten macht. Denn die Hälfte der Sachen ergibt sich recht
zwangsläufig aus der Protokollbeschreibung der Übertragung bzw. folgt
logisch daraus wie 99% aller Protokolle arbeiten. Da ist auf logischer
Ebene nichts wirklich überraschendes dabei. D.h. man kann aus dem, was
man logischerweise an einer Stelle erwarten würde, recht schnell darauf
schliessen, was man da wohl im Code vor sich sieht, und damit dann die
für einen Nicht-C++ Programmierer ungewohnten 'Sonderzeichen' insofern
entziffern, dass man seine Erwartung mit einer Google Recherche auf
Richtigkeit überprüft.
Übrigens dokumentiert man eine Statemaschine am besten nicht als
deutschen Text, sondern in Form eines Diagrammes. Das ist am aller
übersichtlichsten.
Statemachine
(Die Sache mit dem Pointer ist höchst wahrscheinich auch recht simpel.
sdata ist ein Pointer auf einen Speicherbereich, den der Benutzer der
Statemaschine zur Verfügung stellen muss und in dem die Statemaschine
das Empfangene mitschreibt. So zumindest wäre meine Erstlings-Hypothese
wenn ich ein derartiges Konstrukt in einer Statemaschine sehen würde.)
Eventuell funktionieren auch ein paar der C/C++ --> Pascal "Übersetzer";
ich glaube bei FPC gibt es da ein paar Tools (zumindest für C/C++
Header). Aber, wie schon gesagt, soooo groß sind der Unterschiede bei
Pascal/C/C++ nicht, da kommt man mit etwas nachdenken schnell dahinter)
Rufus Τ. Firefly schrieb:> Es ist fast schon trivial einfach, C++-Code mit einem C-Interface zu> versehen, so daß es keinen Grund gibt, COM einzusetzen.
aber nur wenn du wenig Daten austauschen muss. Vermutlich kann Pacal mit
z.b. QString nichts anfangen.
Peter II schrieb:> Vermutlich kann Pacal mit z.b. QString nichts anfangen.
Dann verpackt man die halt in normalen C-Strings, denn mit QString kann
nichts etwas anfangen, was nicht auch Qt ist.
Für derlei Aufgaben ist ein Interfacewrapper da.
Verstehe die Diskussion nicht.
Er bietet einen bezahlten Job an, oder?
Er hat einen kleinen Ausschnitt gebracht, damit derjenige, der es dann
letztendlich erledigen soll, nicht oder nur wenig überrascht wird.
Man man man....?
@ Mike Kr (mike_kr)
Guter Mann ... Das absolute Minimum, was man als Delphi Programmierer
koennen muss, ist die Schreibweise von C begriffen zu haben ... also
los.
Dann gibt es eine RAD Studio version, die auch C/C++ einbinden kann.
Dann kann man etwas testen & probieren. Wenn man dann etwas besser ist
kann man auch eine C DLL einbinden. Oder eben neu schreiben.
zu guter letzt gibt es auch C-zu-Delphi Translatoren. Das letzte Mal,
als ich die sah, waren sie nicht gut, ist aber auch schon einige Jahre
her.
Pat Wat schrieb:> Verstehe die Diskussion nicht.> Er bietet einen bezahlten Job an, oder?> Er hat einen kleinen Ausschnitt gebracht, damit derjenige, der es dann> letztendlich erledigen soll, nicht oder nur wenig überrascht wird.>> Man man man....?
Weil das
> ... soweit kommentieren, daß verständlich ist?
ein Fass ohne Boden ist, wenn er mit dem simpel geschriebenen Code nicht
klar kommt.
Mike Kr schrieb:> Natürlich nicht umsonst.Pat Wat schrieb:> Er bietet einen bezahlten Job an, oder?
Fakt ist, der TO hat irgenwoher einen Quellcode, hat keine Ahnung von
Programmierung, und will irgendwas, was er selber nicht einschätzen
kann.
Das wird wohl auf "oder" hinauslaufen...
Oliver
Siebzehn Zu Fuenfzehn schrieb:> Guter Mann ... Das absolute Minimum, was man als Delphi Programmierer> koennen muss, ist die Schreibweise von C begriffen zu haben ... also> los.
Wie kommst Du darauf?
Wenn jemand Algol, Pascal oder nun Delphi oder Lazarus Syntax
beherrscht,
dann hat er das deshalb gelernt, weil im C zu kryptisch war und ist.
MfG Paul
Rufus Τ. Firefly schrieb:>> Vermutlich kann Pacal mit z.b. QString nichts anfangen.>> Dann verpackt man die halt in normalen C-Strings,
Wenn mans nach Pascal portiert dann nimmt man lieber normale Strings,
keine C-Strings. Ansonsten könnte mans auch gleich in C++ lassen so wie
es ist und sich nur einen Wrapper bauen für die ganze lib, denn in
Pascal ohne Not mit nullterminierten Strings herumzuwürgen wäre
vollkommen widersinnig.
Okay, nachdem sich nun die Trolle und Wichtigmacher ausgetobt haben
(Wofür gibt es eigentlich einen Moderator???) kann nun wieder zum
eigentlichen Thema zurück gekommen werden. Danke
Wie gesagt, ich kann kein C++ und die Sache mit den Sonderzeichen wurde
schon gut erkannt.
Vielleicht kann die Sache auch abgekürzt werden: Der Quelltext einfach
kurz in ein Verständliches System bringen, kurz erklären um was es geht,
wie es gemacht wurde etc. Das ist ganz sicher recht kurz gemacht, da es
nur um das Datenprotkoll und die "Umrechnung" der Daten geht....
Mike Kr schrieb:> Wie gesagt, ich kann kein C++ und die Sache mit den Sonderzeichen wurde> schon gut erkannt.
Troll, hahahaha...
Ich kann auch kein C/C++, war aber in der Lage, den Meteo... in Pascal
zu übersetzen.
Das können nur Leute, die logisch denken können. Denen ist egal, ob sie
in (Schweine-C), Basic, Pascal oder Suaheli kodieren müssen.
Warum?
Zuerst wird ein Struktogramm erstellt, welches alle Verzweigungen
enthält. Eine formale Programmiersprache. Ein Inschenör macht es genaus
so. Für das Kodieren in welcher Sprache auch immer hat er seine HiWi's.
Peter Xuang schrieb:> Schweine-C
Ich wisste gar nicht, dass es C (ein Dialekt?) für Schweine gibt. Klingt
interessant, hast du vielleicht ein paar Quellen dazu?
karl schrieb:> Peter Xuang schrieb:>> Schweine-C> Ich wisste gar nicht, dass es C (ein Dialekt?) für Schweine gibt. Klingt> interessant, hast du vielleicht ein paar Quellen dazu?http://de.wikipedia.org/wiki/Ook!
Kann man direkt mit [CTRL]+H in Oink! übersetzen. Ist aber kein C :)
Marcus W. schrieb:> karl schrieb:>> Peter Xuang schrieb:>>> Schweine-C>> Ich wisste gar nicht, dass es C (ein Dialekt?) für Schweine gibt. Klingt>> interessant, hast du vielleicht ein paar Quellen dazu?>> http://de.wikipedia.org/wiki/Ook!
Merke: Schwein != OrangUtan
karl schrieb:> hast du vielleicht ein paar Quellen dazu?
[Mod: ein paar verbale Ausfälle gelöscht]
Das Problem ist doch folgendes: Ein Pointer ist ein Hinweisschild, wo
man langfahren muß, will man in die Stadt fahren, auf die das Schild
verweist.
Gibt es ein Schild in NRW, wo man langfahren muß, wenn man zum Sauffest
nach München will, dann gibt man eben an, wo man langfahren muß, um
erstes Schild wiederzufinden ist. Das ist ein Pointer auf einen Pointer.
Ist man via "Pointer" auf jenen "Pointer" gestoßen, dann kann man sein
gewonnenes Wissen wieder versaufen. So kommt es, dass Generationen immer
wieder nach Pointern fragen...
Edit: Es ist nicht so, dass wenn auf einem Vorwegweiser "München" steht,
man dann gleich auf der Wiesn ist. Ausserdem kann die ISIS diese
Schilder auch verdrehen, dann landet man im schlimmsten Fall in Sacksen
am Maschendrahtzaun.