Text Mode Windows
Verfasst: Mo 22. Okt 2012, 21:11
Ich stelle die erste Implementierung meines Konzeptes für Text-Mode-Windows vor. Es handelt sich nicht um Windows im Sinne einer grafischen Benutzeroberfläche, sondern eher um Scroll Regions, wie z.B. im KC-CAOS. Die Implementierung basiert auf belflash.spin.
Konzept für Textmode-Windows
Entwicklungsstand
Verbesserung zur Vorgängerversion
Zur Diskussion
1. Welches Verhalten wird gewünscht, wenn die Position von cursetx/y außerhalb des Fensters liegt? Aktuell passiert nichts vernünftiges. Man könnte automatisch Window 0 ausgewählen. Das wäre ein halbherziges "PRINT AT" (siehe KC BASIC). Oder man begrenzt die Position auf die Reichweite des Windows. Dann landet der Cursor am Rand oder in einer Ecke.
2. Wie sollen die Windows definiert werden? Aktuell ist es (links oben, rechts unten). Man könnte aber auch statt rechts unten Höhe und Breite angeben.
3. Soll es curset- und -get auch noch relativ zum gewählten Window geben? Oder nur relativ?
Welche Fragen fallen Euch sonst noch ein?
Kommentare
Die Geschwindigkeitssteigerung kommt vor allem daher, dass viele Array-Operationen weggelassen wurden. Das habe ich mir mit einem Satz skalarer Variablen (beginnen mit c wie current), also mit zusätzlichem Speicherplatz erkauft.
Das Testprogramm
...ist recht unaufgeräumt. Es enthält ein paar Tests und hinterlässt einen liederlichen Bildschirm - alles, was ich brauchte.
Man übersetzt bel_win.spin zu bel_win.bel und t_win.spin zu t_win.bin.
t_win lässt sich im aktuellen Trios starten und gibt dann nur ein paar Zeilen mit Zeitmessung aus. Der restliche Test erfolgt erst nach Laden von bel_win.
Grüße vom U-Held
Konzept für Textmode-Windows
- - pro Screen 8 Windows:
- - Window 0 unveränderlich über gesamten Bildschirm
- - Window 1 Standardfenster, z.B um Hive-Logo vor dem Wegscrollen zu schützen
- - wird beim Reset festgelegt
- - kann verändert werden
- Windows können definiert und später gewählt werden
- print*, newline, curhome, curpos1, scroll* beachten das Window
- curgetx/y liefern absolute Position
- cursetx/y beachtet das Window nicht (absolute Positionierung)
- Zusatzfunktion, um einen Rahmen um das aktuelle Window zu zeichnen
- Feature-Bit 7 in CHIP_SPEC zeigt an, dass Window-Funktionen implementiert sind. - - Window 1 Standardfenster, z.B um Hive-Logo vor dem Wegscrollen zu schützen
- - curgety liefert die absolute Position
- sline und eline sind ohne Wirkung
- col und row sind intern nur noch Bytes. Das beschränkt die max. Screengröße auf 255x127 Zeichen.
Entwicklungsstand
- - getestet:
- - Scrolling
- Definition und Umschaltung von Windows und Screens
- verzögerter Zeilenumbruch mit Window-Umschaltung
- - Farbumschaltung
- Cursor: -Home, -Pos1, -Zeichen
- scrollup
- Tabs
- - Verhalten bei Positionierung außerhalb des aktuellen Window
- Tabulatoren
- - Scrolling
Verbesserung zur Vorgängerversion
- - curgety und cursety "passen zusammen"
- Scrolling und Zeichenausgabe ca. 10% schneller
Zur Diskussion
1. Welches Verhalten wird gewünscht, wenn die Position von cursetx/y außerhalb des Fensters liegt? Aktuell passiert nichts vernünftiges. Man könnte automatisch Window 0 ausgewählen. Das wäre ein halbherziges "PRINT AT" (siehe KC BASIC). Oder man begrenzt die Position auf die Reichweite des Windows. Dann landet der Cursor am Rand oder in einer Ecke.
2. Wie sollen die Windows definiert werden? Aktuell ist es (links oben, rechts unten). Man könnte aber auch statt rechts unten Höhe und Breite angeben.
3. Soll es curset- und -get auch noch relativ zum gewählten Window geben? Oder nur relativ?
Welche Fragen fallen Euch sonst noch ein?
Kommentare
Die Geschwindigkeitssteigerung kommt vor allem daher, dass viele Array-Operationen weggelassen wurden. Das habe ich mir mit einem Satz skalarer Variablen (beginnen mit c wie current), also mit zusätzlichem Speicherplatz erkauft.
Das Testprogramm
...ist recht unaufgeräumt. Es enthält ein paar Tests und hinterlässt einen liederlichen Bildschirm - alles, was ich brauchte.
Man übersetzt bel_win.spin zu bel_win.bel und t_win.spin zu t_win.bin.
t_win lässt sich im aktuellen Trios starten und gibt dann nur ein paar Zeilen mit Zeitmessung aus. Der restliche Test erfolgt erst nach Laden von bel_win.
Grüße vom U-Held