TUI programmieren [C]

Diskussion zum Thema Programmierung unter DOS (Intel x86)
Benutzeravatar
oDOSseus
LAN Manager
Beiträge: 239
Registriert: Di 10. Aug 2010, 15:21

Re: TUI programmieren [C]

Beitrag von oDOSseus »

Habe schon erfolgreich erste Menügruppen gebaut.
Alles schön dynamisch.
Der Header ist jetzt schon 1.000 Zeilen (Kommentare inklusive) lang xD
wird langsam unübersichtlich. Jedoch kann ich nichts in andere Header auslagern, weil man dann sowieso immer beide includen muss, weil die funktionen und variablen alle ineinander greifen xD. Naja. Trotzdem klappt der Header super. Den wird man auch gut wiederverwenden können.
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:Habe schon erfolgreich erste Menügruppen gebaut.
Alles schön dynamisch.
Der Header ist jetzt schon 1.000 Zeilen (Kommentare inklusive) lang xD
wird langsam unübersichtlich. Jedoch kann ich nichts in andere Header auslagern, weil man dann sowieso immer beide includen muss, weil die funktionen und variablen alle ineinander greifen xD. Naja. Trotzdem klappt der Header super. Den wird man auch gut wiederverwenden können.
Super, super, super. :peanutbutterjellytime:

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

Re: TUI programmieren [C]

Beitrag von oDOSseus »

Ich schreibe grade das erste Programm mit der TUI.
Sie ist noch sehr rudimentär:
- Man kann keine Fenster verschieben.
- Rechtsklicks werden noch nicht abgefragt
usw...
aber eins finde ich muss noch rein:
Wenn ich das Feld unter der Maus (33h) verändere, dann veränder ich ja leider nicht, das "gepufferte" Feld. Und sobald sich die Maus bewegt, ist das Feld wieder unverändert.
Beispiel:
Vorher ist überall alles grün. Ich male es Blau. Bewege die Maus. Da wo die maus war, bleibts grün. Das ist ein hässlicher Fleck, der weg muss.

Weiß jemand wie ich das mache?
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:Ich schreibe grade das erste Programm mit der TUI.
Sie ist noch sehr rudimentär:
- Man kann keine Fenster verschieben.
- Rechtsklicks werden noch nicht abgefragt
usw...
aber eins finde ich muss noch rein:
Wenn ich das Feld unter der Maus (33h) verändere, dann veränder ich ja leider nicht, das "gepufferte" Feld. Und sobald sich die Maus bewegt, ist das Feld wieder unverändert.
Beispiel:
Vorher ist überall alles grün. Ich male es Blau. Bewege die Maus. Da wo die maus war, bleibts grün. Das ist ein hässlicher Fleck, der weg muss.

Weiß jemand wie ich das mache?
In der Cutemouse ist es schwer den Buffer zu finden.

Hast du schon mal ausprobiert vor dem Malen den Mousecursor auszuschalten und danach wieder anzuschalten?

RBIL->inter61c.zip->INTERRUP.N
--------M-330001-----------------------------
INT 33 - MS MOUSE v1.0+ - SHOW MOUSE CURSOR
AX = 0001h
SeeAlso: AX=0002h,INT 16/AX=FFFEh,INT 62/AX=007Bh,INT 6F/AH=06h"F_TRACK_ON"
--------M-330002-----------------------------
INT 33 - MS MOUSE v1.0+ - HIDE MOUSE CURSOR
AX = 0002h
Note: multiple calls to hide the cursor will require multiple calls to
function 01h to unhide it.
SeeAlso: AX=0001h,AX=0010h,INT 16/AX=FFFFh,INT 62/AX=007Bh
SeeAlso: INT 6F/AH=08h"F_TRACK_OFF"

Dirk
Zuletzt geändert von freecrac am So 22. Aug 2010, 19:22, insgesamt 2-mal geändert.
Benutzeravatar
oDOSseus
LAN Manager
Beiträge: 239
Registriert: Di 10. Aug 2010, 15:21

Re: TUI programmieren [C]

Beitrag von oDOSseus »

Ne...
Hätte ich auch drauf kommen können -.-
Dankesehr
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:Ne...
Hätte ich auch drauf kommen können -.-
Dankesehr
Hoffentlich geht das.

Dirk
DOSferatu
DOS-Übermensch
Beiträge: 1220
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: TUI programmieren [C]

Beitrag von DOSferatu »

Hm... Also ich weiß zwar, was TUI in dem Fall bedeuten soll... Aber ich denke da die ganze Zeit an ein gewisses Reisebüro...
Benutzeravatar
oDOSseus
LAN Manager
Beiträge: 239
Registriert: Di 10. Aug 2010, 15:21

Re: TUI programmieren [C]

Beitrag von oDOSseus »

Ich hoffe du bist nicht böse, wenn dieses Feedback nicht unter die Kategorie "Sinnvolle Beiträge" fällt xD

Die Produktion der TUI wird sich wahrscheinlich jetzt sehr lange hinziehen da nun noch kleinigkeiten (viele kleinigkeiten) behoben werden müssen und ich evtl nochmal die Grundstruktur ändern muss. Außerdem bin ich in einer woche in der 13 und da muss ich viel lernen (muss jetzt in den Ferien schon anfangen).

Sobald die Library fertig ist, werde ich den Quellcode hier posten oder hochladen, denn ihr habt alle mitgeholfen und ich bin sowieso ein Fan von OpenSource.
Der Quellcode ist auch gut durch-dokumentiert, sodass man nicht viele schwierigkeiten haben sollte.

mit allerfreundlichsten Grüßen
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:Ich hoffe du bist nicht böse, wenn dieses Feedback nicht unter die Kategorie "Sinnvolle Beiträge" fällt xD

Die Produktion der TUI wird sich wahrscheinlich jetzt sehr lange hinziehen da nun noch kleinigkeiten (viele kleinigkeiten) behoben werden müssen und ich evtl nochmal die Grundstruktur ändern muss. Außerdem bin ich in einer woche in der 13 und da muss ich viel lernen (muss jetzt in den Ferien schon anfangen).

Sobald die Library fertig ist, werde ich den Quellcode hier posten oder hochladen, denn ihr habt alle mitgeholfen und ich bin sowieso ein Fan von OpenSource.
Der Quellcode ist auch gut durch-dokumentiert, sodass man nicht viele schwierigkeiten haben sollte.

mit allerfreundlichsten Grüßen
Prima, dann kann ich mal schauen ob ich den Code entschlüsseln kann.:idea:

Dirk
Zuletzt geändert von freecrac am Mo 30. Aug 2010, 08:34, 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 »

Was die Programmierung beschleunigen würde, wäre ein Programm, für das man ne kleine TUI brauchen könnte, das aber inhaltlich relativ fix zu programmieren geht.
Hat da wer ne idee?
edit geht wohl kaum xD
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:Was die Programmierung beschleunigen würde, wäre ein Programm, für das man ne kleine TUI brauchen könnte, das aber inhaltlich relativ fix zu programmieren geht.
Hat da wer ne idee?
edit geht wohl kaum xD
Einen kleinen ASCII-Editor um damit einen Sourcecode bearbeiten zu können kann man rel. fix programmieren. Mit Hotkeys könnte man dort ein Rohgerüst für eine Befehlszeile ausgeben lassen und so den Cursor plazieren, so das man nur noch Argumente in die betreffende Eingabezeile eintragen braucht. Für die Auswahl der Argumente könnte man durch die bereits bestehenden Variablen/Sprungadressen etc. mit bestimmten Tasten durchscrollen lassen um die Auswahl dort zu erleichtern. Man könnte eine Funktion einbauen um noch unbekannte fixe Sprungadressen die nach vorne gerichtet sind offen zu lassen, deren Stelle sich von der Funktion gemerkt wird. Später wenn die Sprungadresse bekannt wird, kann eine weitere Funktion alle betreffenden Stellen mit der nun bekannten Sprungadresse eintragen. Eine Syntaxprüfung der aktuellen Eingabezeile auf Vollständigkeit und bei Werten auf eine sinvolle Höhe, könnte mögliche Fehler frühzeitig sichtbar machen.

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

Re: TUI programmieren [C]

Beitrag von oDOSseus »

Hm dazu fallen mir sofort 2 Fragen ein:
1) Du meinst wahrscheinlich einen editor um gut ASM zu coden oder?
2) Wozu brauche ich dazu eine ausgefeilte TUI?

Mein Ziel ist eine TUI mit Fenstern, buttons usw. Aber für deine Wünsche reicht ja schon die Umgebung von "edit", die ich schon angesprochen habe. Diese Umgebung ist meiner Meinung nach eben KEINE gute Ausgangspoisition zur Entwicklung einer umfangreichen TUI-Library. Außerdem ist das problem dabei noch, die großen Textarea die seeehr hohe Anforderungen:
a) Scrollbar muss her
b) Der Text muss in die RAM
c) Ich muss eine neue "Umgebung" schreiben zum Einfügen von Text, die auf sichtbaren und Unsichtbaren Text achtet und den Text entsprechend scrollt.
Ich habe sowas mal für ein Textfeld gemacht(einzeilig also) und das hat schon viel nerven gekostet. Daher war grade das etwas, was ich Anfangs umgehen wollte.
Verstehst du was ich meine?
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:Hm dazu fallen mir sofort 2 Fragen ein:
1) Du meinst wahrscheinlich einen editor um gut ASM zu coden oder?
Auch, aber auch C-Listings, Pascal, Basic, oder auch Batchdateien könnte man damit unterstützen.
2) Wozu brauche ich dazu eine ausgefeilte TUI?
Um mehrere Programmiersprachen unter einer TUI zu vereinen?
Mein Ziel ist eine TUI mit Fenstern, buttons usw. Aber für deine Wünsche reicht ja schon die Umgebung von "edit", die ich schon angesprochen habe. Diese Umgebung ist meiner Meinung nach eben KEINE gute Ausgangspoisition zur Entwicklung einer umfangreichen TUI-Library. Außerdem ist das problem dabei noch, die großen Textarea die seeehr hohe Anforderungen:
a) Scrollbar muss her
b) Der Text muss in die RAM
c) Ich muss eine neue "Umgebung" schreiben zum Einfügen von Text, die auf sichtbaren und Unsichtbaren Text achtet und den Text entsprechend scrollt.
Ich habe sowas mal für ein Textfeld gemacht(einzeilig also) und das hat schon viel nerven gekostet. Daher war grade das etwas, was ich Anfangs umgehen wollte.
Verstehst du was ich meine?
Na klar verstehe ich das. Als Programmierer darf man sich um sehr viele kleine Dinge kümmern und wenn alles fertig ist, sieht man davon so gut wie gar nichts mehr und nur andere Programmieren können sich ein ungefähres Bild davon machen was sich unter der Motorhaube versteckt und mit welchen Problemen man es zu tun bekommt um die Dinge zu realisieren die für die Benutzer nicht sichtbar sind, oder mit einem einzigen Klick erledigt sind.

Zu Punkt "b)" kann ich ggf. weiterhelfen.
Damit man Speicher von DOS anfordern kann, muss der Speicher zunächst wieder freigegeben werden, da unser Programm beim Starten allen verfügbaren Speicher zugewiesen bekommen hat.
Dafür benutze ich folgende kleine Subroutinen (und jeweils dafor wie man sie anspringt):

Code: Alles auswählen

          call SETFREE ; Speicher freigeben
          .....

;------------------------------------
SETFREE:  mov      bx, ss            ; zunächst die beiden Segmentadressen
          mov      ax, es            ; voneinander abziehen. Das ergibt die
          sub      bx, ax            ; Anzahl der Paragraphen vom PSP bis
                                     ; zum Anfang des Stack
          mov      ax, sp            ; da sich der Stackpointer am Ende des
          add      ax, 0Fh           ; Stacksegments befindet, gibt sein
          shr      ax, 4             ; Inhalt die Länge des Stacks an
          add      bx, ax            ; zur bisherigen Länge hinzuaddieren
          mov      ah, 4Ah           ; neue Größe an das DOS übergeben
          int    21h
          ret

Code: Alles auswählen

          mov bx, 1000h ; um 64 Kib anfordern
          call GETSPACE
          jc  NOSPACE   ; springe wenn Fehler! Die angeforderte Speichermenge ist  nicht verfügbar.
                        ; nun haben wir im AX-Register die Segmentadresse des freien Speichers
          mov ds, ax    ; wir laden damit ein Segmentregister
          mov di, 0     ; Offsetregister
          mov al, "A"   ; Einen beliebigen Wert
          mov [di], al  ;  in den Speicher schreiben nach ds:di
          .....

;------------------------------------
GETSPACE: mov      ah, 48h           ; anfordern/reservieren:  BX = Anzahl/16
          int    21h
          ret
Dirk
Benutzeravatar
oDOSseus
LAN Manager
Beiträge: 239
Registriert: Di 10. Aug 2010, 15:21

Re: TUI programmieren [C]

Beitrag von oDOSseus »

hat das listning einen unterschied zum einfachen "malloc" bzw. "calloc"?
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:hat das listning einen unterschied zum einfachen "malloc" bzw. "calloc"?
Ich denke das Int 21h 4Ah und 48h die Standard-Methode ist um dynamisch Speicher von DOS freizugeben und anzufordern.
Nun habe ich mal nachgelesen was malloc und calloc überhaupt macht und ich vermute das es wohl über obige Soft-Interrupts erledigt wird.
In einer "malloc.h" dieser hier: http://nms.lcs.mit.edu/software/snoop/s ... s/malloc.h konnte ich darüber allerdings nichts genaues finden.
Mich erschlägt wieder mal die Anzahl der dortigen Deklerationen und das nur für so eine einfache Sache, für mich ist es immer wieder der reinste Wahnsinn wie aufwendig so etwas in C realisiert wird. Aber es gibt ja verschiedene Versionen davon.
Welche ist jetzt nun die richtige und wo wird nun der eigentliche IRQ dafür überhaupt zugeordnet, weisst du wo man so etwas findet, oder kannst du mal ein kleines C-Listing mit malloc schreiben und Compilieren und dann mal in die "malloc.exe" schauen?
Z.B. mit: "Debug malloc.exe" und dann "u cs:0100", oder ggf. "u cs:0200" wenn der Code dort anfängt. Dann wissen wir es genau. Zu berücksichtigen wäre allerdings das debug selber keine 32 Bit-Register/Operanden/Adressen kennt.
Wie groß wird denn so eine "malloc.exe" wenn dort nur das Nötigste dafür enthalten ist?

Dirk
Antworten