Backspace beim Texteinlesen



  • So, ich habe mal wieder eine Frage zum Thema Texteinlesen.
    Ich habe jetzt mal ein Programm geschrieben, mit dem ich die Scan Codes der gedrückten Taste bekomme und lasse dann das entsprechende Zeichen ausgeben und in einen Puffer schreiben.
    Doch meine Frage ist jetzt halt: Wie verarbeite ich die Backspace-Taste? Also das letzte Zeichen aus dem Puffer wieder zu löschen sollte kein Problem sein. Aber wie lösche ich das letzte ausgegebene Zeichen und?



  • Ich würde mal vorschlagen, den Cursor ein Zeichen zurückzusetzen und an dieser Stelle ein Leerzeichen hinzupacken



  • Okay, hört sich gut an.
    Aber wie kann ich das anstellen? Also wie kann ich den Cursor zurücksetzen? Habe dazu leider nur Dos-Ints gefunden. Aber ich würde das Ganze gerne ohne Dos-Ints machen. Nur mit Bios Interrupts.



  • Schreib doch direkt in den Bildschirmspeicher ueber die Adresse SEG $B800.

    Du kannst auch (bei gepufferter Eingabe), das Backspace direkt im Puffer verarbeiten und den internen Puffer-Index-/Zeiger zuruecksetzen.



  • Hi.

    Am effektivsten ist es in diesem Fall zur Bildschirmausgabe auch keine BIOS-Interrupts zu benutzen, sondern direkt in den Bildschirmpuffer zu schreiben.
    Fuer den normalen 16Farben-Textmodus liegt der bei B8000h (physikalische Adresse).
    Dort immer abwechselnd zuerst Zeichen und im naechsten Byte entsprechenden Farbwert eintragen. Gibt zu dem Thema hier schon einige Threads.

    Den Cursor kannst du mit int 10h, Funktion 2 verschieben. Dazu eine Interruptliste, zB. die von Ralf Brown befragen.

    Edit:
    Zu spaet - egal. 😃



  • Nobuo T schrieb:

    Fuer den normalen 16Farben-Textmodus liegt der bei B8000h (physikalische Adresse).
    Dort immer abwechselnd zuerst Zeichen und im naechsten Byte entsprechenden Farbwert eintragen. Gibt zu dem Thema hier schon einige Threads.

    Gut danke, ich habe mich jetzt mal etwas weiter damit beschäftigt, da ich mal wieder Zeit habe. Nun bin ich auf die Formel (Y*80+X)*2 gestoßen, die für die Positionierung des Textes sorgen soll.
    Nun habe ich die Frage: Wie kann ich einen Zeilenumbruch darstellen? Wenn ich also nicht weiß, wie viel schon in die aktuelle Zeile geschrieben wurde und in welcher Zeile ich mich befinde. Gibt es da einen Trick? Oder muss ich überprüfen, wieviel in der Zeile schon steht und dann den Rest bis zur nächsten Zeile addieren?



  • Habe ich das richtig verstanden: Du hast keine Koordinaten gegeben, sondern nur ein Offset?

    In diesem Fall wuerde ich folgende Formel vorschlagen:
    Offset = (Offset - (Offset mod (80 * 2))) + (80 * 2)

    Zurueck zum Zeilenanfang und eine Zeile runter...



  • Ja, so meinte ich das. Eigentlich ganz einfach die Formel, da hätte ich auch selbst drauf kommen können. Aber das denkt man sich später immer.
    Also, vielen Dank.


Anmelden zum Antworten