Hallo zusammen,
jetzt habe ich mein textbasiertes Frontend komplett auf die 'curses.h'-Bibliothek umgestrickt, jetzt tut es auch, was es soll. Na ja, wenigstens fast:
[
attachment=55771]
Wie in der untersten, cyanfarben dargestellten Zeile zu sehen, mogelt sich da immer ein Zeichen des ersten abgesetzten Kommandos ein, obwohl ich eigentlich diese Stelle vor der nächsten Textausgabe mit Leerzeichen überschreibe.
Manchmal werden auch nicht alle Zeichen überschrieben!
Auf diese beiden Effekte kann ich mir momentan noch keinen Reim machen.
Ich muss noch in der Doku zu 'curses.h' weiterlesen, ob es da eine Entsprechung zum 'clreol' (clear end of line) von Turbo-Pascal gibt.
Hier mal der Code:
Code:
/* Frontend V3 */
#include <curses.h>
int main (void) {
int c;
initscr ();
start_color();
init_pair(1,COLOR_YELLOW,COLOR_BLUE);
init_pair(2,COLOR_GREEN,COLOR_BLUE);
init_pair(3,COLOR_RED,COLOR_BLUE);
init_pair(4,COLOR_CYAN,COLOR_BLUE);
attrset(A_BOLD|COLOR_PAIR(2));
keypad (stdscr, TRUE);
noecho();
//Bildschirm füllen
int Zeile, Spalte;
for( Zeile = 0; Zeile < 26; Zeile++ )
{
for( Spalte = 0; Spalte < 81; Spalte++ )
{
mvprintw(Zeile,Spalte," ");
}
}
mvprintw(2,15,"Textbasiertes Frontend für Internetradio");
attrset(A_BOLD|COLOR_PAIR(3));
mvprintw(5,10,"q:");
attrset(A_BOLD|COLOR_PAIR(1));
mvprintw(5,13,"Beenden");
attrset(A_BOLD|COLOR_PAIR(3));
mvprintw(7,10,"+:");
attrset(A_BOLD|COLOR_PAIR(1));
mvprintw(7,13,"Lauter");
attrset(A_BOLD|COLOR_PAIR(3));
mvprintw(9,10,"-:");
attrset(A_BOLD|COLOR_PAIR(1));
mvprintw(9,13,"Leiser");
attrset(A_BOLD|COLOR_PAIR(3));
mvprintw(11,10,"N:");
attrset(A_BOLD|COLOR_PAIR(1));
mvprintw(11,13,"Nächster Sender");
attrset(A_BOLD|COLOR_PAIR(3));
mvprintw(13,10,"V:");
attrset(A_BOLD|COLOR_PAIR(1));
mvprintw(13,13,"Vorheriger Sender");
attrset(A_BOLD|COLOR_PAIR(3));
mvprintw(15,10,"P:");
attrset(A_BOLD|COLOR_PAIR(1));
mvprintw(15,13,"Pause");
attrset(A_BOLD|COLOR_PAIR(4));
while ((c = getch ()) != 'q') {
switch (c) {
case 'v':
case 'V':
mvprintw (20,10," ");
mvprintw (20,10,"Gewählte Funktion: Vorheriger Sender");
//Hier folgt Funktionsaufruf 'Vorheriger Sender'
break;
case 'N':
case 'n':
mvprintw (20,10," ");
mvprintw (20,10,"Gewählte Funktion: Nächster Sender");
//Hier folgt Funktionsaufruf 'Nächster Sender'
break;
case '+':
mvprintw (20,10," ");
mvprintw (20,10,"Gewählte Funktion: Lauter");
//Hier folgt Funktionsaufruf 'Lauter + 2%'
break;
case '-':
mvprintw (20,10," ");
mvprintw (20,10,"Gewählte Funktion: Leiser");
//Hier folgt Funktionsaufruf 'Leiser - 2%'
break;
case 'P':
case 'p':
mvprintw (20,10," ");
mvprintw (20,10,"Gewählte Funktion: Pause");
//Hier folgt Funktionsaufruf 'Pause'
break;
}
}
endwin ();
return 0;
}
Ich probiere das Ganze derzeit an meinem Laptop aus, hier habe ich (noch) kein VLC installiert, daher sind die Stellen der Switch-Case-Verzweigung mit Kommentaren versehen, an welchen die Systemaufrufe für VLC eingefügt werden müssen.
Das ganze kann man mit Sicherheit eleganter lösen, es sind halt meine ersten Ausflüge in die Programmierung mit C/C++.
Grüße
Martin