Forum: PC-Programmierung CYGWIN Anwendung in cmd.exe und Cursortasten-Problem


von 900ss (900ss)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe eine Konsolenanwendung mit cygwin geschrieben. Diese nutzt 
unter anderem die "readline" Library weil eine Art Kommandozeile 
innerhalb der Anwendung existiert.

Starte ich dieses Programm auf meinem Rechner, funktionieren die 
Cursortasten und DEL wie gewünscht.

Wenn ich die Anwendung weitergebe, muß ich die Anwendungs-EXE und die 
cygwin1.dll weitergeben, da auf den Zielrechnern kein Cygwin installiert 
ist. Das ist auch nicht gewünscht.
Leider funktionieren auf dem Zielrechner die Cursortasten und auch DEL 
nicht mehr. Bei DEL kommt z.B. ein Blank. Cursor rechts/links macht auch 
Blödsinn.

Das gleiche Fehlverhalten habe ich auch auf meinem Rechner, wenn ich die 
Cygwin1.dll in das Verzeichnis kopiere, wo das Executable vom make 
erstellt wird. Entferne ich die DLL dort und sie muß über den PATH 
gefunden werden funktioniert alles richtig.

Ich habe schon die Suchmaschienen befragt, finde auch Hinweise auf die 
'.inputrc'-Datei aber wo muß diese liegen, wenn kein Cygwin installiert 
ist, sondern nur die cygwin1.dll existiert?

Hat jemand einen hilfreichen Hinweis?

Im Anhang ein sehr kurzes Testprogramm. Nach Aufruf gibt es in der 
Anwendung eine "Konsole", man kann Zeugs eintippen was nach Enter wieder 
ausgegeben wird. Jetzt kann man Cursor rauf/runter verwenden um z.B. in 
der History zu blätten. Aber DEL und Cursor rechst/links funktioniert 
nicht. Nur wenn Cygwin ordnungsgemäß installiert ist.

Kompilieren mit
gcc bdc1.c -o bdc1.exe -lreadline

Danke für Eure Hilfe.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Da Cygwin eine Art Linux-Emulator ist, könnte es sein, daß es termcap 
verwendet, und das auf Deinem Rechner anders installiert/konfiguriert 
ist als auf dem Rechner, auf dem Du Dein Programm mit DLL laufen lassen 
willst.

Termcap ist ein Fossil aus dem Unix-Ursumpf, mit dem unterschiedliche 
Terminalbefehlssätze standardisiert werden (VT100, TVI52, Cybernex, 
whatever), um halbwegs hardwareunabhängig Bildschirmausgaben machen zu 
können.

von 900ss (900ss)


Lesenswert?

termcap ist auf dem Zielrechner garnicht installiert.

Die Anwendung, die ich programmiere, gibt es schon länger und 
funktionierte bisher klaglos. Nur jetzt seitdem ich die readline Lib. 
verwednen will ist das Problem mit den Cursortasten da. Vorher gab es 
auch keine Möglichkeit irgendetwas einzugeben, da war alles über 
Kommandozeilenparamter zu steuern.

von RTFM (Gast)


Lesenswert?

http://web.mit.edu/cygwin/cygwin_v1.3.2/usr/doc/Cygwin/readline-4.2.README

    readline uses termcap functions, but will link to the
    ncurses library (which provides emulated versions of
    these termcap functions).

Ich würde von daher vermuten, dass du auf dem Zielrechner
NCurses benötigst, welches wiederum auf die terminfo- oder
termcap-Datenbank zurück greift. Die brauchst du also auf
jeden Fall auch noch auf dem Zielrechner.

von 900ss (900ss)


Lesenswert?

RTFM schrieb:
> Ich würde von daher vermuten

Danke, muß mal schauen, welche DLLs ich noch brauche dafür. Werde ich 
morgen machen.

von Marc S. (marc_s86)


Lesenswert?

900ss D. schrieb:
> RTFM schrieb:
>> Ich würde von daher vermuten
>
> Danke, muß mal schauen, welche DLLs ich noch brauche dafür. Werde ich
> morgen machen.

ich glaube cygcheck hilft dir dabei. wenn ich mich recht erinnere listet 
das dependencies auf.

von 900ss (900ss)


Angehängte Dateien:

Lesenswert?

Ich habe einen Dependency-Walker genommen um zu sehen, welche DLLs 
angezogen werden. Siehe Anhang.

Unter dem KERNEL32.DLL stehen nur Windows-DLLs.

Dann habe ich eine Rechner ohne Cygwin-Installation genommen und 
folgende Konfiguration getestet:

1) Nur EXE + cygwin1.dll
Es wurde CYGREADLINE7.DLL vermißt

2) Nur EXE + cygwin1.dll + CYGREADLINE7.DLL
Es wurde CYGNCURSESW-10.DLL vermißt

3) Nur EXE + cygwin1.dll + CYGREADLINE7.DLL + CYGNCURSESW-10.DLL
Anwendung startet, aber die Cursortasten + DEL funktionieren immer noch 
nicht. Also das alte Problem.

Da ich öfter Hinweise gefunden hatte, dass von cygwin die .inputrc 
genutzt wird um Tasten zu "übersetzen", vermute ich das Problem in die 
Richtung. Aber wo soll die .inputrc hin? In dem Verzeichnis der EXE 
hilft sie nicht.
Außerdem ist es auch nur eine Vermutung.

Wenn jemand etwas mehr weiß wäre ich um Hinweise dankbar.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.