TUI programmieren [C]

Diskussion zum Thema Programmierung unter DOS (Intel x86)
DOSferatu
DOS-Übermensch
Beiträge: 1220
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: TUI programmieren [C]

Beitrag von DOSferatu »

Normalerweise kommentiere ich so gut wie gar nicht. Und da ich den in TP eingebauten Assembler benutze, benutze ich sogar normalerweise das Feature, die Befehle durch Semikolon trennen zu können und klatsche soviel wie möglich auf eine Zeile....
Ich habe wie gesagt den obengenannten Pascal-Source nur aus der SWAG (es ist also nicht auf meinem Mist gewachsen) - und habe nicht extra nachgeschaut, wie die VGA-Register heißen und was sie tun. Und ja, ich habe eine vollständige Doku in Buchform zur ET4000 hier - fast DIN A4 groß und 1,5 cm dick und da sind wirklich ALLE BITS ALLER REGISTER drin aufgezählt und erklärt.
Es heißt "ET4000 / W32 Data Book" (also zusätzlich etwas Doku zu der Win32 Version drin) und ist original von Tseng Labs. Das habe ich mal von einem (ehemaligen) Computerfreak geschenkt bekommen.
Und JA - ich hätte jetzt in diesem Buch einzeln nachschauen können, wie die Register heißen und so weiter, aber dachte, Dir reicht erstmal der Code.
Sollte mich irgendwann mal der Hafer stechen, werd ich das Teil mal Seite für Seite aufn Scanner packen und einscannen und dann vielleicht mit nem gescheiten OCR-Programm drübergehen und das ganze Zeugs online stellen...
Die Auszüge, die freecrac gesendet hat, stammen aus "Ralph Brown's Interrupt List" - die enthält ja bekanntlich nicht nur eine Liste der INT-Funktionen, sondern auch Files mit Listen für Ports und "wichtige Speicherstellen" (BIOS-"SpeicherSeite") usw.
freecrac
DOS-Guru
Beiträge: 861
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: TUI programmieren [C]

Beitrag von freecrac »

DOSferatu hat geschrieben:Normalerweise kommentiere ich so gut wie gar nicht. Und da ich den in TP eingebauten Assembler benutze, benutze ich sogar normalerweise das Feature, die Befehle durch Semikolon trennen zu können und klatsche soviel wie möglich auf eine Zeile....
Ich habe wie gesagt den obengenannten Pascal-Source nur aus der SWAG (es ist also nicht auf meinem Mist gewachsen) - und habe nicht extra nachgeschaut, wie die VGA-Register heißen und was sie tun. Und ja, ich habe eine vollständige Doku in Buchform zur ET4000 hier - fast DIN A4 groß und 1,5 cm dick und da sind wirklich ALLE BITS ALLER REGISTER drin aufgezählt und erklärt.
Es heißt "ET4000 / W32 Data Book" (also zusätzlich etwas Doku zu der Win32 Version drin) und ist original von Tseng Labs. Das habe ich mal von einem (ehemaligen) Computerfreak geschenkt bekommen.
WOW, das ist super.
Und JA - ich hätte jetzt in diesem Buch einzeln nachschauen können, wie die Register heißen und so weiter, aber dachte, Dir reicht erstmal der Code.
Sollte mich irgendwann mal der Hafer stechen, werd ich das Teil mal Seite für Seite aufn Scanner packen und einscannen und dann vielleicht mit nem gescheiten OCR-Programm drübergehen und das ganze Zeugs online stellen...
Ohne irgendwelche Dokus über die ET4000 zu haben konnte ich die Ports für die Bankumschaltung aus dem Bios auslesen, in dem ich die dortige Routine dafür durchsuchte.
Diese Ports für die Bankumschaltung habe ich mir gemerkt Port: 3CDh und für höhere Banknummer(von der W32) Port 3CBh.

Dirk
Benutzeravatar
oDOSseus
LAN Manager
Beiträge: 239
Registriert: Di 10. Aug 2010, 15:21

Re: TUI programmieren [C]

Beitrag von oDOSseus »

hat jemand einen vorschlag für ein 8x8 Piktogramm einer Festplatte oder irgendeinem, dass ein Laufwerk darstellt?
meiner wäre jetzt:

Code: Alles auswählen


XXXXXXXX
X      X
X XXXX X
XXXXXXXX
X XXXX X
X      X
XXXXXXXX
Benutzeravatar
oDOSseus
LAN Manager
Beiträge: 239
Registriert: Di 10. Aug 2010, 15:21

Re: TUI programmieren [C]

Beitrag von oDOSseus »

Ich hänge grad so ein bisschen fest.
Mitlerweile klappen alle einzelteile.
Aber wie soll ich das mit den überlappenden Fenstern machen?
ich habe in jedem ELEMENT object (Alles von ner Checkbox bis zum Fenster ist hierbei ein Element) ein "nDepth"-Feld beigefügt, dass angibt, wie weit im Hintergrund das teil liegt. Das is ja auch bei 1em Fenster ganz gut. Nur wenn ich die nach vorne und hinten verschieben möchte, müsste ich ja alle werte iwi ändern, weil die ja absolut und nicht relativ sind, weil ich mit der relativität noch probleme hab.
Hat jemand schonmal sowas gemacht? ich komme damit nicht klar...
DOSferatu
DOS-Übermensch
Beiträge: 1220
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: TUI programmieren [C]

Beitrag von DOSferatu »

Ich habe es bei meinem Pirate-Chat (Textmode) mit überlappenden Fenstern schon gemacht. Es sind maximal 16 Fenster zugelassen. Ich habe ein Array angelegt, das für jede "Zeichenposition" ein Word (also 16bit) enthält, welches Fenster gerade aktiv ist. Wenn ich Fenster "nach vorn" hole, ändere ich deren Index auf den "obersten"... Bei der Anzeige funktioniert das dann so, daß ich evtl das ganze Bild anzeige, beim jeweiligen "Zeichen" sehe ich, welches das oberste Bit ist und das Zeichen des Fensters an der Position zeige ich an... Hm... irgendwie n bißchen kompliziert, das jetzt so theoretisch zu erklären...
Benutzeravatar
oDOSseus
LAN Manager
Beiträge: 239
Registriert: Di 10. Aug 2010, 15:21

Re: TUI programmieren [C]

Beitrag von oDOSseus »

Das heißt also, dass du die Tiefer/Höhe der Fenster absolut angibst und die Elemente innerhalb der Fenster wieder relativ?
DOSferatu
DOS-Übermensch
Beiträge: 1220
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: TUI programmieren [C]

Beitrag von DOSferatu »

Hm... ja, jedes Fenster hat einen Parameter-Record (in C heißen die Dinge struct). Ich kann diese Records austauschen, d.h. wenn ich ein Fenster nach vorn hole, tausche ich die Records...
Die Fenster bleiben quasi immer gleich - ich sortiere sie nur um.
Sie haben einen Sub-Index, der z.B. dafür da ist, sie mit dem richtigen Inhalt zu verknüpfen, dann noch die Rahmenfarbe, den Fenstertyp, die Koordinaten, die Breite und Höhe, den "Eigner" (also wem das Fenster gehört) und so weiter... Ist eben speziell ausgelegt auf diesen IRC-Client.
Das mit den Bits habe ich gemacht, weil es ja auch passieren kann, daß mittendrin ein Fenster gelöscht oder verschoben wird usw. Bei der Anzeige muß man dann eben nur nach dem höchsten Bit gehen und das Fenster zeigt man dann an - bzw das Zeichen/Farbe, das das Fenster an dieser Position hat. Sind alle Bits=0 (d.h. das Word an dieser Stelle =0) zeige ich an der Stelle den "Hintergrund" an. (Bei mir besteht der nur aus vielen gleichen Zeichen.)

D.h. meine Ausgaberoutinen schreiben immer direkt in das Fenster rein (in den Fensterpuffer) und zusätzlich auf den Screen. (Wahlweise auch nur Screen oder nur Puffer.)

Damit man die Fenster auch nachträglich vergrößern/verkleinern kann und trotzdem der gesamte Inhalt, mit richtigen Umbrüchen, angezeigt wird, hat jedes Fenster so einen "Inhalts-Ringpuffer", in den immer reingeschrieben wird und den ich pro Fenster 16 kB groß gemacht habe. Wenn man das Fenster also größer macht (oder auch wenn man die Auflösung größer macht und das Fenster auf Maximalgröße zieht), zeigt er auch noch Text an, der in der kleineren Auflösung schon verschwunden wäre. (Die Ringpuffer sind nicht im Heap, sondern in einem externen File, das eben genau 256 kB groß ist (16 Fenster à 16 kB).

Ich hab das eben alles so speziell auf diesen Client ausgelegt, daher ist das alles so "seltsam". Aber ich dachte, vielleicht kannst Du daraus irgendwelche Anregungen oder Ideen ziehen für Dein Projekt.
Benutzeravatar
oDOSseus
LAN Manager
Beiträge: 239
Registriert: Di 10. Aug 2010, 15:21

Re: TUI programmieren [C]

Beitrag von oDOSseus »

Die Lust, weiterzumachen schwindet doch enorm, wenn man sich mit so ner verdammten Fensterreihenfolge rumschlagen muss.
Habe das Problem zu Beginn gar nicht gesehen... Aber jetzt fällts mir auf.
Ich lerne erstmal fürs Vorabi und programmier dann und wann ein wenig auf dem c64 (hab ein interessantes Zahlenrätsel gebaut, falls wer interesse hat, stell ichs online. is in basic). Dann schaue ich mal weiter. Ich will das Projekt ja auch nicht sterben lassen
Benutzeravatar
oDOSseus
LAN Manager
Beiträge: 239
Registriert: Di 10. Aug 2010, 15:21

Re: TUI programmieren [C]

Beitrag von oDOSseus »

-gelöscht-
Zuletzt geändert von oDOSseus am Sa 1. Apr 2023, 17:55, insgesamt 1-mal geändert.
Benutzeravatar
oDOSseus
LAN Manager
Beiträge: 239
Registriert: Di 10. Aug 2010, 15:21

Re: TUI programmieren [C]

Beitrag von oDOSseus »

Das war die letzt Prüfung, Entwicklung wieder aufgenommen!
------------
Ich würde mich wirklich sehr freuen wenn jemand hier ideen hat wie man das machen kann.
Benutzeravatar
oDOSseus
LAN Manager
Beiträge: 239
Registriert: Di 10. Aug 2010, 15:21

Re: TUI programmieren [C]

Beitrag von oDOSseus »

Interessiert das hier überhaupt keinen mehr?
DOSferatu
DOS-Übermensch
Beiträge: 1220
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: TUI programmieren [C]

Beitrag von DOSferatu »

Doch, natürlich ist es interessant. Weiß nur im Moment nicht, was ich dazu schreiben soll. Schreib' doch einfach mal, was es so neues an Deiner TUI gibt (wenn es etwas neues gibt).

Das einzige, was mir im Moment erstmal einfällt, ist: Herzlichen Glückwunsch zum Abitur.

Und wegen der Fensterreihenfolge hatte ich ja schon Vorschläge gemacht.
freecrac
DOS-Guru
Beiträge: 861
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: TUI programmieren [C]

Beitrag von freecrac »

oDOSseus hat geschrieben:Interessiert das hier überhaupt keinen mehr?
Na doch, aber mir geht es ähnlich wie DOSferatu und auch ich kann dir erstmal nur mit Glückwunsch zum Abi gratulieren.
Ich warte auch ob es was Neues gibt.

Dirk
Benutzeravatar
oDOSseus
LAN Manager
Beiträge: 239
Registriert: Di 10. Aug 2010, 15:21

Re: TUI programmieren [C]

Beitrag von oDOSseus »

Achsoo
okay. Danke euch beiden =)
Ich habe das ganze System der reihenfolge umgeschmissen.
Es gibt nun Eltern-Elemente und Kind-Elemente. Das allerhöchste Elternelement ist NO_PARENT, also quasi der desktop. alle Kindelemente davon haben ein Feld in dem die ID des Eltern-Elements steht (in diesem konkreten Beispiel NO_PARENT). haben diese Kindelemente wiederum kinder, dann haben die natürlich auch wieder die ID ihres Eltern-Elements usw. usw.
Also in Baumstruktur:

Code: Alles auswählen

          +--Window1
NO_PARENT-+          +---Label1
          +--Window2-+
                     +---Textarea1
Nur das Zeichnen verursacht noch probleme. Und danach muss ich mich den klicks zuwenden. Und wenn das endlich klappt, dann kann ich mich daran machen, die Reihefolge zu ändern.
Benutzeravatar
oDOSseus
LAN Manager
Beiträge: 239
Registriert: Di 10. Aug 2010, 15:21

Re: TUI programmieren [C]

Beitrag von oDOSseus »

-Ende-
Zuletzt geändert von oDOSseus am Sa 1. Apr 2023, 17:55, insgesamt 1-mal geändert.
Antworten