Hallo,
Assembler kannst Du nicht nehmen, wie willst Du das denn portieren ?
Es gibt mehrere Lösungen unterschiedlicher Qualität:
DOS:
getchar() bzw. fgetc(stdin) funktionieren nicht so wie gewollt,
da hier die Tastatureingaben erst nach Drücken der Return Taste
an das Programm übergeben werden.
Alternative:
Du kannst die Tastatur Eingaben mit _getch() (siehe conio.h) lesen.
Der eingegebene Buchstabe wird nicht geechoet.
Wenn Du ein Echo brauchst, nehme _getche().
Problem:
Leider funktioniert das nur unter DOS, es gibt kein Pendant unter
Unix/Linux.
Unix/Linux:
Eine ähnliche Funktionalität wie mit _getch() erreichst Du unter Unix,
indem Du Dein Terminal(fenster) in den Raw (char Device) Modus setzt.
(Default ist Cooked (Block Device))
Dazu musst Du entweder vor dem Start Deines Programmes
z. B. unter Linux ein "stty raw" absetzen oder im Programm
mit ioctl() das Terminal in den Raw Modus setzen.
Dann liefert getchar() bzw fgetc(stdin) das gewünschte Ergebnis.
Zum Ende des Programms bzw. nach dem Verlassen des Programms
muss das Terminal mit "stty cooked" oder ioctl()
wieder in den cooked Modus gesetzt werden, sonst
kannst Du nicht mehr vernuenftig damit arbeiten ;-)
(Wenn CR nicht mehr funktionierst, kannst Du ctrl-j nehmen )
Besser und portabel:
Am Besten verwendest Du die Curses Bibliothek.
Unter Linux im Standard Lieferumfang der mir bekannten Distris,
unter DOS als PC-Curses verfügbar. (einfach mal Googeln)
Der Umgang mit Curses ist nicht leicht, aber gut dokumentiert.
Vorteile:
Portabel
Laeuft mit allen bekannten Terminal Emulationen (VT100, ANSI, VT52......)
gesteuert über die Environment Variable TERM
Ist ein alter Unix Standard.
Bietet viele Features zur Bildschirm Ansteuerung incl. Fenstertechnik.
Ist sehr performant.
Die Tastaturabfrage selber muesstest Du natürlich
in die Hauptschleife des Programms mit einbauen.
Hier stellt sich das Problem, eine nicht blockierende Tastaturabfrage
zu implementieren, damit die Hauptschleife nicht angehalten wird.
Hier würde ich entweder 2 Prozesse (s. fork()) oder Threads nehmen.
Die Lösung mit Prozessen würde mir besser gefallen.
Kommunizieren können sie entweder mit Signalen (man signal)
oder besser mit Messages (man ipc, man msgget).
Meine Ideallösung wäre ein Daemon Prozess für den Server
und ein separates Programm, was über Messages mit dem Daemon
kommuniziert und das Front End bildet.
Gruss, vergisses