expertenaustausch > comp.lang.* > comp.lang.pascal

Robert Hartmann (23.08.2010, 21:46)
Hallo zusammen,

Die free pascal sourcen habe ich gefunden:


Könnte mir bitte jemand einen Hinweis geben,
in welcher Datei keypressed und readkey
implementiert sind?
Ich nehme mal an, dass die in Assembler programmiert sind.
Oder wie hat man diese beiden Funktionalitäten hinbekommen?

Gruß Robert
Sieghard Schicktanz (24.08.2010, 11:31)
Hallo Robert,

Du schriebst am Mon, 23 Aug 2010 21:46:02 +0200:

> Die free pascal sourcen habe ich gefunden: ....
> Könnte mir bitte jemand einen Hinweis geben,
> in welcher Datei keypressed und readkey
> implementiert sind?


Wenn Du die Sourcen hast, dann würde ich Dir empfehlen, die einfach zu
durchsuchen.
Unter Linux würde ich dazu "grep" empfehlen, da kann man sich darauf
verlassen, daß das vorhanden ist. Das gibt's auch für Windows, wenn aber
bei Dir nicht, dann suchst Du Dir halt ein passendes Suchprogramm (der
Totalcommander enthält z.B. ein gut dafür geeignetes) und machst das damit.

> Ich nehme mal an, dass die in Assembler programmiert sind.
> Oder wie hat man diese beiden Funktionalitäten hinbekommen?


Das kannst Du dann ganz einfach durch Nachlesen feststellen. Es könnte
ggfs. davon abhängen, für welches Betriebssystem Du die Routinen brauchst.

BTW: ein ganz klein wenig Eigeninitiative hilft manchmal ein gutes Stück
weiter!
Robert Hartmann (26.08.2010, 10:18)
Moin,

Am 24.08.2010 11:31, schrieb Sieghard Schicktanz:
> Hallo Robert,
> Du schriebst am Mon, 23 Aug 2010 21:46:02 +0200:
> ...
> Wenn Du die Sourcen hast, dann würde ich Dir empfehlen, die einfach zu
> durchsuchen.
> Unter Linux würde ich dazu "grep" empfehlen, da kann man sich darauf
> verlassen, daß das vorhanden ist. Das gibt's auch für Windows, wenn aber


Grep war ein guter Wink mit dem Zaunpfahl. :-)

fpc-2.4.0\rtl\unix\crt.pp/858: Function KeyPressed:Boolean;

> Das kannst Du dann ganz einfach durch Nachlesen feststellen. Es könnte
> ggfs. davon abhängen, für welches Betriebssystem Du die Routinen brauchst.


Was ich vor hatte, war nachzuvollziehen wie in PASCAL für Linux
keypressed und readkey implementiert sind.

Hintergrund ist der, dass ich gerne in einem C / C++ Programm
eben die Funktionalität von keypressed und readkey benutzen möchte,
ohne dass ich mich darauf verlassen muss, dass der Zielrechner
tatsächlich Zusatzbibliotheken wie z.B. ncurses /pdcurses bereit hält.

(Unter DOS kann man es über Interrups machen und unter Windows durch
die WinAPI-Konsolenfunktionen. Linux/Unix scheint dies bezüglich nicht
ganz so einfach zu [durchschauen zu] sein.)

Eigentlich hatte ich gehofft, dass ich über die PASCAL Sourcen begreife,
wie man nicht-blockierend feststellen kann, ob im
"Linux-STDIN-Buffer" etwas drin ist (also keypressed)
und wenn ja, was drin ist (also readkey).

> BTW: ein ganz klein wenig Eigeninitiative hilft manchmal ein gutes Stück
> weiter!


:-) Ist schon richtig, trotzdem "[Wer, wie, was ...] manchmal muss man
fragen, um zu verstehen."

Wenn ich den Quelltext fpc-2.4.0\rtl\unix\crt.pp richtig verstehe,
wird zum Einen ein Pascal-eigener Puffer benutzt und zum Anderen
wird der Wert von
sysKeypressed:=(fpSelect(TTYIn+1,@fdsin,nil,nil,0) >0);
überprüft.

Ich denke die zugehörige Implementierung von fpSelect habe ich in
der Datei fpc-2.4.0\rtl\unix\bunxovl.inc gefunden.

Aber ich begreife nicht wirklich was fpSelect macht,
außer einen Timeout zu beachten.

Gruß Robert
Wolf Behrenhoff (26.08.2010, 21:01)
On 26.08.2010 10:18, Robert Hartmann wrote:
[..]
> der Datei fpc-2.4.0\rtl\unix\bunxovl.inc gefunden.
> Aber ich begreife nicht wirklich was fpSelect macht,
> außer einen Timeout zu beachten.


Vermutlich dasselbe wie select... Vielleicht solltest du dazu auch die
Dokumentation zu select lesen:

man select
man select_tut

Wolf
Sieghard Schicktanz (26.08.2010, 21:36)
Hallo Robert,

Du schriebst am Thu, 26 Aug 2010 10:18:42 +0200:

> Grep war ein guter Wink mit dem Zaunpfahl. :-)
> fpc-2.4.0\rtl\unix\crt.pp/858: Function KeyPressed:Boolean;


Für Textsuche in Dateien ist grep _immer_ ein guter Wink. Etwa gleichauf
liegt awk, das sich aber eher dann anbietet, wenn man mit dem gefundenen
noch was anstellen möchte,

> Was ich vor hatte, war nachzuvollziehen wie in PASCAL für Linux
> keypressed und readkey implementiert sind.


Vor was hattest Du das?
Die beiden Funktionen sind unter Linux "natürlich" so implementiert, daß
sie Funktionen des zuständigen Treibers benutzen, das ist hier eben der
Konsolen-Treiber ("TTY"). Der ist so weitgehend konfigurierbar, daß es
dafür fast ein eigenes "API" gibt - allerdings ist das mittels IOCTL-
Aufrufen implementiert.
Benutzerseitig ist dafür das Programm "stty" zuständig - solltest Du Dir
ggfs. mal anschauen.

> Hintergrund ist der, dass ich gerne in einem C / C++ Programm
> eben die Funktionalität von keypressed und readkey benutzen möchte,
> ohne dass ich mich darauf verlassen muss, dass der Zielrechner
> tatsächlich Zusatzbibliotheken wie z.B. ncurses /pdcurses bereit hält.


Ist kein Problem - auch die "curses" benutzen nix anderes als die TTY-
Konfiguration. Für Cä dürften Dir da aber die man pages zum Thema
"Konsole" ("console*") mehr weiterhelfen, weil da die ganzen C-Aufrufe
gleich angeführt sind. Du solltest besonders die Sektionen 2 und 3, aber
auch 4 und 7 beachten - letztere besonders für die IOCTL-Codes und -Daten,
die da gebraucht werden.
Das kann unter C schon recht komplex werden, weil einem da nicht so schöne
vorgefertige Units wie bei FPC die Arbeit abnehmen...

> (Unter DOS kann man es über Interrups machen und unter Windows durch
> die WinAPI-Konsolenfunktionen. Linux/Unix scheint dies bezüglich nicht
> ganz so einfach zu [durchschauen zu] sein.)


Im Gegenteil - trotz der Komplexität ist es eher deutlich einfacher, und
vor allem direkt vom System unterstützt, dies oder das bezüglich (was soll
das eigentlich heißen? Sowas wie hin oder her? Ich kannte bisher nur ein
"diesbezüglich".).

> wie man nicht-blockierend feststellen kann, ob im
> "Linux-STDIN-Buffer" etwas drin ist (also keypressed)


_Das_ hat mit der Konsole allerdings garnichts zu tun, das ist eine ganz
allgemeine Funktion für Dateizugriffe, und dzf. gibt es dafür ein ganz
allgemeines "API" - Suchbegriffe "select" und "(e)poll".

> > BTW: ein ganz klein wenig Eigeninitiative hilft manchmal ein gutes Stück
> > weiter!

> :-) Ist schon richtig, trotzdem "[Wer, wie, was ...] manchmal muss man
> fragen, um zu verstehen."


Aber Suchen muß man im allgemeinen schon selber - dann weiß man auch,
was man gefunden hat... ;-)
(Fragen kann man dann, was man damit, was man gefunden hat, anstellen kann,
bzw. wie man was damit machen kann.)

> Wenn ich den Quelltext fpc-2.4.0\rtl\unix\crt.pp richtig verstehe,
> wird zum Einen ein Pascal-eigener Puffer benutzt und zum Anderen


Das wird einfach der Buffer des (Pseudo-) Textfiles "input" sein.

> wird der Wert von
> sysKeypressed:=(fpSelect(TTYIn+1,@fdsin,nil,nil,0) >0);
> überprüft.


Ja, das ist der normale Mechanismus. Und was, denkst Du, wird "fpSelect"
intern machen?

> Ich denke die zugehörige Implementierung von fpSelect habe ich in
> der Datei fpc-2.4.0\rtl\unix\bunxovl.inc gefunden.
> Aber ich begreife nicht wirklich was fpSelect macht,
> außer einen Timeout zu beachten.


Ganz einfach: es fragt das System, ob für mindestens einen der angegebenen
Datei-Handles Daten verfügbar sind: man select.

Ich würde Dir raten, zur Programmierung mit "low-level-" Funktionen unter
Linux direkt die man pages der Systemfunktionen zu suchen und zu
"studieren". Dann kannst Du die dort angegebenen Aufrufbeschreibungen
direkt in einem C-Modul verwenden (C, nicht C++, der Linux-Kernel ist in C
geschrieben) und mußt die nicht erst aus dem ganzen Umfeld herauspuhlen.
Für die Benutzung unter C++ mußt Du dann evtl. noch "Wrapper" bauen, damit
die Namensvermanschung ("name mangling") des Compilers nicht alles
kaputtmacht, aber das liefern Dir ggfs. die Bibliotheken Deines Compilers
schon weitgehend fertig. Beim gcc gibt es da ja schon einiges, was gleich
mitgeliefert wird.
Was da allerdings nötig, wichtig, nützlich oder unnütz ist, kann ich Dir
nicht sagen - mit C++ hab' ich bisher noch nix angestellt. (Ich hab' auch
noch kein Minenfeld durchsucht, und das werde ich ohne Not auch vermeiden.)
;->
Robert Hartmann (01.09.2010, 17:10)
Am 26.08.2010 21:36, schrieb Sieghard Schicktanz:
> Hallo Robert,
> Du schriebst am Thu, 26 Aug 2010 10:18:42 +0200:
> Für Textsuche in Dateien ist grep _immer_ ein guter Wink. Etwa gleichauf
> liegt awk, das sich aber eher dann anbietet, wenn man mit dem gefundenen
> noch was anstellen möchte,
> Vor was hattest Du das?


Danke :-)

Es wäre sicher besser gewesen, wenn ich geschrieben hätte:
"Ich habe vor nachzuvollziehen wie ... , ähnliche Funktionen
in einem C Quellcode implementieren und nutzen zu können." :-)

[...]
> Im Gegenteil - trotz der Komplexität ist es eher deutlich einfacher, und
> vor allem direkt vom System unterstützt, dies oder das bezüglich (was soll
> das eigentlich heißen? Sowas wie hin oder her? Ich kannte bisher nur ein
> "diesbezüglich".).


Bezogen auf das "dies bezüglich", ich dachte man schreibt das inzwischen
auch so.

(Induktionsanfang:
Delphin habe ich früher mit f geschrieben,
damals war es falsch heute ist es das nicht mehr.
Rest des Beweises als Übung) .-)

[..]
> nicht sagen - mit C++ hab' ich bisher noch nix angestellt. (Ich hab' auch
> noch kein Minenfeld durchsucht, und das werde ich ohne Not auch vermeiden.)
> ;->


Danke für die Hilfe,
Gruß Robert
Sieghard Schicktanz (01.09.2010, 21:24)
Hallo Robert,

Du schriebst am Wed, 01 Sep 2010 17:10:19 +0200:

> >> Was ich vor hatte, war nachzuvollziehen wie in PASCAL für Linux ....

> > Vor was hattest Du das?

> Danke :-)
> Es wäre sicher besser gewesen, wenn ich geschrieben hätte:


Es hätte gereicht, wenn Du "vorhatte" geschrieben hättest, "vorhaben" ist
m.W. immer noch ein korrektes deutsches Wort.

> Bezogen auf das "dies bezüglich", ich dachte man schreibt das inzwischen
> auch so.


> (Induktionsanfang:
> Delphin habe ich früher mit f geschrieben,
> damals war es falsch heute ist es das nicht mehr.
> Rest des Beweises als Übung) .-)


Achso, sozusagen Orthographie nach unvollständiger Induktion?

Ich bleibe erstmal bei der alten Schreibweise. In 10 bis 20 Jahren, wenn im
Deutschen die getrennt Schrei Bung Stand Art ( >-I )geworden ist, wird mit
Sicherheit eine schlaue Kommision die im Amerkanischen inzwischen üblich
gewordene vorteilhafte Neuerung des Zusammenschreibens von Worten, die einen
eigenständigen Begriff bilden, in die deutsche Rechtschreibung eingeführt
werden. Wenn ich solange warte, brauche ich mich dann nicht wieder
umzugewöhnen.

> Danke für die Hilfe,


Na, Du hast ja inzwischen in der C-Gruppe genügend Zaunpfähle abbekommen...
Nich? ;->
Ähnliche Themen