MSG_GO_ROTATE im alten und neuen SDK

  • Im alten SDK ist die Message wie folgt definiert (und funktioniert mit Borland):

    @message void MSG_GO_ROTATE( /* XXX */
    WWFixed angle = cx.dx,
    GrObjHandleSpecification center = bp);

    Im neuen SDK dagegen (funktioniert nicht):

    @message void MSG_GO_ROTATE( /* XXX*/
    GrObjHandleSpecification center = bp,
    WWFixedAsDWord angle = dx.cx);

    Im Sourcecode zur Message tritt nur WWFixed auf. Und die Reihenfolge der Bearbeitung der Parameter entspricht eher der alten Definition.

  • Die Änderungen hat Marcus Groeber am 12.11.2022 vorgenommen. Kommentar: Header fixes required by VConvert. Am Besten, du sprichst mit ihm.

    Rainer

    Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.

  • Die Änderung am 21.11.22 ist von Dir.:)

    Marcus hat am 10.3.24 etwas geändert. Meine Zeigeruhr zeigt nur noch Unsinn. Ok, das ist kein Problem, aber die jetzige Rotationsmethode erzeugt recht chaotisches Verhalten in meinem Grafikprojekt.

  • Du hast recht, da hab ich mich doch im Datum vertan :) Ich hatte dort ein paar Initialisierungen von Instancevariablen gefixt (WWFixed vs. WWFixedAsDWord)
    Die Änderung an MSG_GO_ROTATE ist aber trotzdem von Marcus. Die Frage ist, warum er so eine inkompatible Änderung vorgenommen hat.

    Rainer

    Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.

  • Hallo Falk,

    der Tausch der Register ist die Lösung!:)

    Es bleiben aber die Fragen:

    1. Warum wurden die Parameter für Drehwinkel und Drehpunkt vertauscht?

    2. Warum wurde der Datentyp für Drehwinkel geändert?

    Vermutlich hat noch niemand (außer Marcus und mir) mit MSG_GO_ROTATE gearbeitet?

    Gruß

    Wilfried

  • Das Problem war, dass einige Prototypen for Messages in GOC im alten SDK falsch waren, so dass ich mir im Laufe der Zeit ein Headerfile "fixes.goh" mit korrigierten Prototypen geschrieben habe. Meist betraf das Messages mit einem "XXX"-Kommentar von Geoworks (bin mir nicht sicher, ob das vielleicht "ungetestet" bedeutet, oder "noch ungelöste Probleme"?).

    Irgendwann letztes Jahr habe ich diese Änderungen dann mal zurück übertragen und fixes.goh entfernt, damit die "offiziellen" Header korrekt sind. Vermutlich habe ich dabei in dieser Message versehentlich die Register-Definition falsch herum abgeschrieben, während eigentlich nur die richtige Reihenfolge der Parameter nötig gewesen wäre. Eigentlich dachte ich, dass V-Convert diese Funktion auch nutzt und mir das beim Portierern hätte auffallen müssen, aber evtl. habe ich keine Testdatei verwendet, die eine Drehung enthielt...

    Wenn es so herum klappt, würde ich den Fix einfach einchecken. Danke für's Finden! :)

    ps: Es kann sein, dass auch noch irgendein Problem mit der Übergabe von Strukturen als Parameter auf dem Stack aufgetreten ist, daher vermutlich der Wechsel zu WWFixedAsDWord, weil das besser zwischen Compilern portabel sein sollte.

  • Was ich noch nicht verstehe: wie hängt die Register-Zuordnung mit der Reihenfolge der C-Parameter zusammen? Also warum war die Reihenfolge der C-Parameter im der alten Definition "falsch"? Das cx.dx vs dx.cx nicht geht ist schon klar, aber der Rest?

    Rainer

    Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.

  • Btw: Wer pflegt dass abschließend in die Dokumentation ein? Aktuell steht da
    MSG_GO_ROTATE

    Code
    void    MSG_GO_ROTATE (
            WWFixed                     angle,
            GrObjHandleSpecification    center);

    This message rotates the GrObj about one of its handles.


    ;):P

    Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.

  • Btw: Wer pflegt dass abschließend in die Dokumentation ein? Aktuell steht da
    MSG_GO_ROTATE

    Code
    void    MSG_GO_ROTATE (
            WWFixed                     angle,
            GrObjHandleSpecification    center);

    This message rotates the GrObj about one of its handles.

    Vielleicht wäre es am einfachsten, wenn Wilfried das mit der getesten Änderung der Signatur macht, dann passt gleich alles zusammen - es reicht ja, die Änderung nur in den Markdown-Techdocs zu machen, der Rest dürfte über kurz oder lang sowieso verschwinden (ASCII enthält eigentlich schon nichts mehr, was wir nicht auch in Markdown haben, während HTML noch einige Communicator-APIs wie etwa die foam-Library bewahrt, die allerdings im Sourcecode nicht vorhanden sind).

  • es reicht ja, die Änderung nur in den Markdown-Techdocs zu machen, der Rest dürfte über kurz oder lang sowieso verschwinden (ASCII enthält eigentlich schon nichts mehr, was wir nicht auch in Markdown haben, während HTML noch einige Communicator-APIs wie etwa die foam-Library bewahrt, die allerdings im Sourcecode nicht vorhanden sind).

    Mein Vorschlag wäre, das in Syhra noch mal final zu besprechen / entscheiden und gleich das Repo anzupassen. Evtl gleich mit "ich mach das" Festlegung, wenn es da noch etwa zu tun gibt.

    Rainer

    Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.

  • Aber ich wüsste gar nicht, wie und wo ich Zugang zu den MD-Texten bekomme.

    Zumindest das ist recht einfach zu erklären. :)

    1. Online-Dokumentation hier öffnen: https://bluewaysw.github.io/pcgeos/
    2. Irgendwie (z.B. im Suchfeld) zur Seite mit MSG_GO_ROTATE navigieren: https://bluewaysw.github.io/pcgeos/Objects…l#msg_go_rotate
    3. Ganz unten auf der Seite steht ein Link: Edit this page on GitHub
    4. Der führt dann zum Quelltext der Seite im Repo: https://github.com/bluewaysw/pcge…jects/ogrobj.md (zuerst wird die formatierte Version angezeigt, und unter "Code" gibt es dann den Markdown-Text, wie er im Repo steht)
    5. Hier wäre dann die Stelle zum Editieren: https://github.com/bluewaysw/pcge…d?plain=1#L2303

    Ich glaube, man kann die Datei sogar gleich auf der Webseite von GitHub ändern und einen PR machen, aber das habe ich noch nie probiert. Ich würde das dann einfach mit dem PR machen, der auch die Include-Datei korrigiert.

    Sobald der PR gemerged ist, wird die Webseite automatisch neu erzeugt.