Suche äquivalente Linux-API-Befehle zu WinAPI-Befehlen

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Suche äquivalente Linux-API-Befehle zu WinAPI-Befehlen

Beitrag von NicTheQuick »

Ich weiß nicht, wie viele sich schon mit der API von Linux rumgeschlagen haben, aber
ich bin jetzt gerade auf ein paar Probleme gestoßen als ich meine Raytracing-Engine
portieren wollte.

Unter anderem muss deswegen folgende WinAPI-Befehle übersetzen: GetAsyncKeyState_()
Dafür habe ich folgende Linux-Äquivalente gefunden, die aber nicht so funktionieren,
wie ich es annahm:
getc_(0) : 0 ist die Konstante für stdin und getc_() ist eigentlich dafür gedacht um aus
einer Datei zu lesen. Mit der 0 wird aber vom Standard-Input gelesen. Leider stürzt das
Programm dann aber ab.
getc_unlocked(0) : Hier passiert das selbe wie bei getc_(0)
getchar_() : Das Programm bleibt bei dem Befehl stehen, aber egal, welche Taste ich
drücke, es geht nicht weiter.
getchar_unlocked_() : Hier wieder das selbe wie bei getchar_unlocked_()

Welche Alternative gibt es da noch?

Der nächste zu übersetzende Befehl ist: 'SetCursorPos_()'
Hier habe ich noch nichts vergleichbares gefunden. Weiß da jemand Rat?

Wenn weitere Probleme entstehen, meld ich mich dann wieder. <)
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Must wohl im internet mal nach GTK, SLD, etc suchen. Ist schon eine goße umstellung gegen über WinAPI.

Hier mal schon ein Link zu GTK
http://library.gnome.org/devel/gtk/stable

:wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Vielleicht ist das hier noch etwas (Ich verstehe sowieso nicht was an GTK so toll ist wo man doch direkt mit X kommunizieren kann :-) ):

http://tronche.com/gui/x/xlib/input/XGrabPointer.html
http://tronche.com/gui/x/xlib/input/XWarpPointer.html
http://tronche.com/gui/x/xlib/display/o ... ml#Display

Sorry, das Forum spinnt hier grad gewaltig und desshalb sind hier zuerst 2 Beiträge gestanden.
Zuletzt geändert von DarkDragon am 31.08.2009 12:48, insgesamt 1-mal geändert.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
FloHimself
Beiträge: 338
Registriert: 05.09.2004 18:47

Beitrag von FloHimself »

getc / getchar sind im Prinzip korrekt (für Konsolen-basierte Programme). Da es sich bei deiner Raytracing-Engine aber um eine "Anwendung für X" handeln wird, kann nicht einfach von stdin gelesen werden; dort wird keine Tastatureingabe ankommen.

Du könntest von einem Input-Device aus /dev/input/event* lesen.
In /proc/bus/input/devices stehen die vorhandenen Keyboard-Devices...

Das wäre ziemlich "low-level" und spätestens bei "SetCurserPos" hättest du ein neues Problem.

Vielleicht ist die Schnittstelle von Xlib das was du suchst?

http://tronche.com/gui/x/xlib/
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Wollte gerade auch schon sagen als ich deinen Post gelesen habe, die X-Server API scheint wohl das zu sein, was du suchst.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Vermilion hat geschrieben:Wollte gerade auch schon sagen als ich deinen Post gelesen habe, die X-Server API scheint wohl das zu sein, was du suchst.
3 Leute 1 Gedanke. :lol:
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Wird wohl noch dauern, bis ich das mal genauer testen kann.

Auf einmal will mein pbcompiler nicht mehr starten.
Und eben ist die IDE dreimal nacheinander mit einem "Segmentation Fault" abgestürzt, weil
ich einen Buchstaben schreiben wollte. :|

Ich glaube ich packe PureBasic doch mal unter /opt/purebasic/ statt ~/programme/purebasic

Da kann auf jeden Fall nichts mit den Dateien passieren.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Folgender Code:

Code: Alles auswählen

XWarpPointer_(#Null, #Null, #Null, 0, 0, 0, 0, 100, 100)
Debug "test2"
MessageRequester("", "test")
[COMPILER] Zeile 1: XWarpPointer_() is not a function, array, macro or linked list.
Ich fühle mich grad wieder wie ein Anfänger. :lol:

Was hab ich nun wieder falsch gemacht? Hat jemand liebenswürdigerweise ein
funktionierendes Code-Beispiel, wie ich mit dem Befehl umgehen muss?


Naja, wenn ich schonmal hier bin, gleich die nächste Frage zu meinem eigentlich Problem:
Ich will ein Fenster erstellen und den Mauscursor immer in der Mitte des Fensters belassen.
Wenn man die Maus dann bewegt, soll sich die Kamera drehen. Wie in einer Art
Ego-Shooter. So hatte ich es bisher auch unter Windows immer gemacht.
Jetzt hab ich aber gesehen, dass 'SetCursorPos_()' keine Events wirft, aber
'XWarpPointer_()' hingegen schon. Das heißt bei jedem Zurücksetzen des bewegten
Cursors auf die Mitte des Fenster würden Gegenevents zur Benutzerbewegung
erzeugt werden, was die ganze Aktion dann ziemlich sinnlos machen würde.

Wie würdet ihr das sonst machen?


Ich kopier PureBasic jetzt endlich mal nach /opt/. ^^
Little John

Beitrag von Little John »

NicTheQuick hat geschrieben:Und eben ist die IDE dreimal nacheinander mit einem "Segmentation Fault" abgestürzt, weil
ich einen Buchstaben schreiben wollte. :|
Du sollst auch nicht immer so viele Buchstaben schreiben. :lol:
(Sorry, den Scherz konnte ich mir nicht verkneifen.)


Eine Frage an die "X-perten" ;-):
Wenn man die Schnittstelle von Xlib verwendet, kann es dann sein dass das Programm auf best. Linux-Distributionen nicht läuft, oder wie kompatibel ist das?

Gruß, Little John
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

[COMPILER] Zeile 1: XWarpPointer_() is not a function, array, macro or linked list.
Im Gegensatz zur GTK und SDL API ist die vom X Server nicht bei PureBasic dabei. D.h. du musst die Shared Objects wohl manuell öffnen und die entsprechenden Funktionen manuell importieren.
Falls es nicht so geht, wie oben geschrieben mit der Ansprechung einer bestimmten "Datei" in "/dev/".
Antworten