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 »

Es dauert zwar noch, doch wenn es soweit ist: wie soll ich den Header posten?
1500 Zeilen passen wohl kaum in eine Nachricht. und diese 1500 zeilen sind nur der Großteil der Library. Eine IO-Library gibt es auch noch. Und noch einen Beispiel-Code. und noch ne Erklärung.

Kann man nicht eine Funktion einbauen, mit der man ZIPs hochladen kann? Ich fände es unschön, so ein unvollendetes Projekt auf meiner Homepage zu veröffentlichen, da es ja nur die Library und kein Nützliches Programm ist...
freecrac
DOS-Guru
Beiträge: 836
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: TUI programmieren [C]

Beitrag von freecrac »

oDOSseus hat geschrieben:Es dauert zwar noch, doch wenn es soweit ist: wie soll ich den Header posten?
1500 Zeilen passen wohl kaum in eine Nachricht. und diese 1500 zeilen sind nur der Großteil der Library. Eine IO-Library gibt es auch noch. Und noch einen Beispiel-Code. und noch ne Erklärung.

Kann man nicht eine Funktion einbauen, mit der man ZIPs hochladen kann? Ich fände es unschön, so ein unvollendetes Projekt auf meiner Homepage zu veröffentlichen, da es ja nur die Library und kein Nützliches Programm ist...
Mit einer Möglichkeit hier ZIPs hochzuladen kann ich selber nicht dienen, aber du kannst doch das ZIP auf deine HP legen und hier einen Link dafür posten, ganz ohne das du dafür deine HP-Dateien veränderst. So habe ich es auch mit meinem
Textbetrachter gemacht, denn meine derzeite HP hat rein gar nichts mit DOS zu tun, weil ich dort nur eine Seite für selbstgebastelte Maps(FreecracMaps) für ein Windows-Egoshooter anbiete.
...

1500+ Zeilen für Librarys empfinde ich schon ohne sie je gesehen zu haben als gewaltig viele.

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

Re: TUI programmieren [C]

Beitrag von oDOSseus »

Muss ich ma gucken wo ich sie hinlege.
Mein Projekt-browser ist ja in PHP geschrieben und sobald ich was in /files/ hochlade, wirds auch angezeigt (hab ich ja extra so programmiert).
Naja ich mach einfach mal nen neuen ordner /dos/.
Wenn ich fertig bin veröffentliche ich den Link hier. Hab aber derzeit klausuren-Phase.
freecrac
DOS-Guru
Beiträge: 836
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: TUI programmieren [C]

Beitrag von freecrac »

oDOSseus hat geschrieben:Muss ich ma gucken wo ich sie hinlege.
Mein Projekt-browser ist ja in PHP geschrieben und sobald ich was in /files/ hochlade, wirds auch angezeigt (hab ich ja extra so programmiert).
Ach so, damit habe ich keine Erfahrung, PHP/CGI darf ich auf meiner HP vom meinem ISP nicht benutzen und so habe ich dort nur eine (self)html mit einem Texteditor geschrieben.
Naja ich mach einfach mal nen neuen ordner /dos/.
Wenn ich fertig bin veröffentliche ich den Link hier. Hab aber derzeit klausuren-Phase.
Prima und lasse dir ruhig damit Zeit. Es eilt ja nicht.

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

Re: TUI programmieren [C]

Beitrag von oDOSseus »

1749 Zeilen nur der Header.
der IO Header hat nochmal 179.

Fenster kann man verschieben
ich kann Felder mit Strings lesen
Ich habe Checkboxen.

fehlen noch Textareas
aber ich glaube die werden ziemlich heftig
eine scrollbar lasse ich glaube ich erstmal weg.

Wenn ich die habe, kann der Header auch in die beta-release gehen.
Dann werde ich ihn wahrscheinlich erstmal etwas beschleunigen, aufmotzen oder was auch immer. Ich glaube da geht noch ne ganze Menge und die Zeilen werden dann auch weniger.

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

Re: TUI programmieren [C]

Beitrag von oDOSseus »

Die Produktion hakt im Moment ein wenig.
Textareas sind noch mehr als erwartet.
Man muss nen Zeilenumbruch berechnen
Man hat ein Sichtfeld
Wenn man mit den Cursertasten navigiert muss man gucken ob man nicht schon in die nächste Zeile muss (auch abhängig vom Zeilenumbruch)
Nach jedem neuen Zeichen muss man den Zeilenumbruch neu berechnen
Und so weiter.
Einfach eine sehr lästige angelegenheit.
Im inet gibts natürlich auch keinen Beispielcode. wie auch xD

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

Re: TUI programmieren [C]

Beitrag von oDOSseus »

Das mit den Textareas krieg ich nicht gebacken...
Ich google mal obs was vergleichbare gibt.
Denke aber eher nicht
wenn jemand ne idee hat wie man das ändern einer Textarea per tastatur organisieren kann, wobei man beachten musst, dass es an jedem alpha-numerischen Zeichen einen Zeilchenumbruch geben könnte und man ja auch mitten drin was ändern müssen kann, kann mir gerne ein paar anreize geben.
DOSferatu
DOS-Übermensch
Beiträge: 1144
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: TUI programmieren [C]

Beitrag von DOSferatu »

Ich hab so etwas schin öfter mal programmiert. Auf den Textmode bezogen (alle Zeichen gleich breit), ist es etwas einfacher als in Grafikmode und Proportionalschrift.

So mache ich den Zeilenumbruch
Erstmal die erste Zeile:
Man weiß, wie breit der zur Verfügung stehende Platz für den Text ist. Dann setzt man eine Variable genau auf das letzte Zeichen der Zeile plus 1. Ist dieses Zeichen ein Leerzeichen, so überspringt man dieses (ignoriert es bei der Ausgabe) und geht weiter zur nächsten Zeile.
Ist das Zeichen KEIN Leerzeichen, so geht man auf das letzte Zeichen der Zeile und prüft nun rückwärts bis zum ersten Zeichen der Zeile auf irgend ein "Trenn-Zeichen" (Leerzeichen oder, wenn man will, auch z.B. Bindestrich oder sowas). Hat man ein Trenn-Zeichen gefunden, BEVOR man an der ersten Position angelangt ist, so erfolgt hier der Umbruch. Das heißt: Man läßt das Trennzeichen stehen, füllt die restliche Zeile mit Leerzeichen auf. Dann geht man in die nächste Zeile und fängt dort eine Textzeile an, die ab Position des Trennzeichens plus 1 geht.
Es gibt noch ein Problem, das zu bewältigen ist, nämlich, wenn im Text ein Wort/Zeichenkette kommt, die keine Trennzeichen enthält und länger ist als die zur Verfügung stehende Textfensterbreite. In diesem Fall würde man beim "Rückwärts-Suchen" des Trennzeichens ganz vorn ankommen. Das ist ein Sonderfall. In dem Fall muß man leider das Wort zerschneiden, d.h. man tut so, als würde es genau an der Textbreite getrennt. (Was bleibt einem sonst auch übrig?)

Hinweis: Beim Editieren des Textes wird sich das Ganze dabei immer nur auf die aktuelle und nachfolgende Zeilen auswirken - oder in einem Spezialfall höchstens auf die vorhergehende der aktuellen Zeile (wenn man am Anfang der aktuellen Zeile ein Wort, das zu lang für die vorige Zeile war, so verkürzt, daß es im Freiraum der vorigen Zeile jetzt Platz hat - dann würde es wieder auf die vorige Zeile gehen.

Achso: Sollte ein "Zeilenendezeichen" im Text gefunden werden (ENTER, LINEFEED, oder was immer man jeweils als Zeilenendezeichen benutzen will). ist das ein erzwungener Zeilenumbruch - hier wird dann immer umgebrochen.

Ich gehe natürlich davon aus, daß man Anzeige und Ausgabe immer trennt. D.h. intern hat man den Text als ... Array oder sonstige eindimensionale Datenstruktur liegen und die Ausgabe ist eben nur für den User.

Vielleicht ist noch zu beachten, daß wenn umgebrochen wird, sich der Cursor innerhalb des TEXTES nicht ändert, wohl aber innerhalb der Anzeige sich die Cursorposition ändern kann. Und: Man ändert ZUERST die Cursorposition und DANN testet man, ob die Y-Cursorposition (die Zeile) evtl. oberhalb der oberen Textfensterzeile oder unterhalb der unteren Textfensterzeile befindet. In diesem Fall muß der Text gescrollt (oder neu aufgebaut) werden - der Cursor muß ja immer im Textfenster sichtbar bleiben.

Ich hoffe, daß diese kleinen Anregungen weiterhelfen können.
Benutzeravatar
oDOSseus
LAN Manager
Beiträge: 239
Registriert: Di 10. Aug 2010, 15:21

Re: TUI programmieren [C]

Beitrag von oDOSseus »

DOSferatu hat geschrieben:Ich hab so etwas schin öfter mal programmiert. Auf den Textmode bezogen (alle Zeichen gleich breit), ist es etwas einfacher als in Grafikmode und Proportionalschrift.

So mache ich den Zeilenumbruch
Erstmal die erste Zeile:
Man weiß, wie breit der zur Verfügung stehende Platz für den Text ist. Dann setzt man eine Variable genau auf das letzte Zeichen der Zeile plus 1. Ist dieses Zeichen ein Leerzeichen, so überspringt man dieses (ignoriert es bei der Ausgabe) und geht weiter zur nächsten Zeile.
Ist das Zeichen KEIN Leerzeichen, so geht man auf das letzte Zeichen der Zeile und prüft nun rückwärts bis zum ersten Zeichen der Zeile auf irgend ein "Trenn-Zeichen" (Leerzeichen oder, wenn man will, auch z.B. Bindestrich oder sowas). Hat man ein Trenn-Zeichen gefunden, BEVOR man an der ersten Position angelangt ist, so erfolgt hier der Umbruch. Das heißt: Man läßt das Trennzeichen stehen, füllt die restliche Zeile mit Leerzeichen auf. Dann geht man in die nächste Zeile und fängt dort eine Textzeile an, die ab Position des Trennzeichens plus 1 geht.
Es gibt noch ein Problem, das zu bewältigen ist, nämlich, wenn im Text ein Wort/Zeichenkette kommt, die keine Trennzeichen enthält und länger ist als die zur Verfügung stehende Textfensterbreite. In diesem Fall würde man beim "Rückwärts-Suchen" des Trennzeichens ganz vorn ankommen. Das ist ein Sonderfall. In dem Fall muß man leider das Wort zerschneiden, d.h. man tut so, als würde es genau an der Textbreite getrennt. (Was bleibt einem sonst auch übrig?)
Hey super, ich mache das exakt genauso. Das ist ja schonmal ne super Bestätigung, dass wir da beide gleich rangehen
Hinweis: Beim Editieren des Textes wird sich das Ganze dabei immer nur auf die aktuelle und nachfolgende Zeilen auswirken - oder in einem Spezialfall höchstens auf die vorhergehende der aktuellen Zeile (wenn man am Anfang der aktuellen Zeile ein Wort, das zu lang für die vorige Zeile war, so verkürzt, daß es im Freiraum der vorigen Zeile jetzt Platz hat - dann würde es wieder auf die vorige Zeile gehen.

Achso: Sollte ein "Zeilenendezeichen" im Text gefunden werden (ENTER, LINEFEED, oder was immer man jeweils als Zeilenendezeichen benutzen will). ist das ein erzwungener Zeilenumbruch - hier wird dann immer umgebrochen.
Auf die Idee, nur die Text ab eine Zeile höher neu zu verarbeiten bin ich irgendwie noch nicht gekommen, werde ich aber mit einbeziehen.
Ich gehe natürlich davon aus, daß man Anzeige und Ausgabe immer trennt. D.h. intern hat man den Text als ... Array oder sonstige eindimensionale Datenstruktur liegen und die Ausgabe ist eben nur für den User.
Ja aber selbstverständlich.
Vielleicht ist noch zu beachten, daß wenn umgebrochen wird, sich der Cursor innerhalb des TEXTES nicht ändert, wohl aber innerhalb der Anzeige sich die Cursorposition ändern kann. Und: Man ändert ZUERST die Cursorposition und DANN testet man, ob die Y-Cursorposition (die Zeile) evtl. oberhalb der oberen Textfensterzeile oder unterhalb der unteren Textfensterzeile befindet. In diesem Fall muß der Text gescrollt (oder neu aufgebaut) werden - der Cursor muß ja immer im Textfenster sichtbar bleiben.
Das habe ich mir auch schon gedacht, aber es hakt an einer Sache: Wenn ich den cursor horizontal verschiebe, wie finde ich raus, ob der in die nächste Zeile muss? bzw. wie finde ich heraus bei welcher Position im String die Zeile auf dem Schirm anfängt? (das wäre ja der nötige Schritt)
Ich hoffe, daß diese kleinen Anregungen weiterhelfen können.
Das hast du =)
freecrac
DOS-Guru
Beiträge: 836
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: TUI programmieren [C]

Beitrag von freecrac »

DOSferatu hat geschrieben:Ich hab so etwas schin öfter mal programmiert. Auf den Textmode bezogen (alle Zeichen gleich breit), ist es etwas einfacher als in Grafikmode und Proportionalschrift.

So mache ich den Zeilenumbruch
Erstmal die erste Zeile:
Man weiß, wie breit der zur Verfügung stehende Platz für den Text ist. Dann setzt man eine Variable genau auf das letzte Zeichen der Zeile plus 1. Ist dieses Zeichen ein Leerzeichen, so überspringt man dieses (ignoriert es bei der Ausgabe) und geht weiter zur nächsten Zeile.
Ist das Zeichen KEIN Leerzeichen, so geht man auf das letzte Zeichen der Zeile und prüft nun rückwärts bis zum ersten Zeichen der Zeile auf irgend ein "Trenn-Zeichen" (Leerzeichen oder, wenn man will, auch z.B. Bindestrich oder sowas). Hat man ein Trenn-Zeichen gefunden, BEVOR man an der ersten Position angelangt ist, so erfolgt hier der Umbruch. Das heißt: Man läßt das Trennzeichen stehen, füllt die restliche Zeile mit Leerzeichen auf. Dann geht man in die nächste Zeile und fängt dort eine Textzeile an, die ab Position des Trennzeichens plus 1 geht.
Es gibt noch ein Problem, das zu bewältigen ist, nämlich, wenn im Text ein Wort/Zeichenkette kommt, die keine Trennzeichen enthält und länger ist als die zur Verfügung stehende Textfensterbreite. In diesem Fall würde man beim "Rückwärts-Suchen" des Trennzeichens ganz vorn ankommen. Das ist ein Sonderfall. In dem Fall muß man leider das Wort zerschneiden, d.h. man tut so, als würde es genau an der Textbreite getrennt. (Was bleibt einem sonst auch übrig?)

Hinweis: Beim Editieren des Textes wird sich das Ganze dabei immer nur auf die aktuelle und nachfolgende Zeilen auswirken - oder in einem Spezialfall höchstens auf die vorhergehende der aktuellen Zeile (wenn man am Anfang der aktuellen Zeile ein Wort, das zu lang für die vorige Zeile war, so verkürzt, daß es im Freiraum der vorigen Zeile jetzt Platz hat - dann würde es wieder auf die vorige Zeile gehen.

Achso: Sollte ein "Zeilenendezeichen" im Text gefunden werden (ENTER, LINEFEED, oder was immer man jeweils als Zeilenendezeichen benutzen will). ist das ein erzwungener Zeilenumbruch - hier wird dann immer umgebrochen.

Ich gehe natürlich davon aus, daß man Anzeige und Ausgabe immer trennt. D.h. intern hat man den Text als ... Array oder sonstige eindimensionale Datenstruktur liegen und die Ausgabe ist eben nur für den User.

Vielleicht ist noch zu beachten, daß wenn umgebrochen wird, sich der Cursor innerhalb des TEXTES nicht ändert, wohl aber innerhalb der Anzeige sich die Cursorposition ändern kann. Und: Man ändert ZUERST die Cursorposition und DANN testet man, ob die Y-Cursorposition (die Zeile) evtl. oberhalb der oberen Textfensterzeile oder unterhalb der unteren Textfensterzeile befindet. In diesem Fall muß der Text gescrollt (oder neu aufgebaut) werden - der Cursor muß ja immer im Textfenster sichtbar bleiben.

Ich hoffe, daß diese kleinen Anregungen weiterhelfen können.
Jetzt wo du das Problem mal genauer umschreibst da erinnere ich mich auch wieder daran das es ganz schön kniffelig werden kann. Von diesen Problemen sieht der Anwender wenn alles so läuft wie es soll überhaupt nichts.
Nur Programmierer die sich einem vergleichbaren Problem schon einmal gewidmet haben können das wirklich nachvollziehen.

Dirk
freecrac
DOS-Guru
Beiträge: 836
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: TUI programmieren [C]

Beitrag von freecrac »

oDOSseus hat geschrieben:Das habe ich mir auch schon gedacht, aber es hakt an einer Sache: Wenn ich den cursor horizontal verschiebe, wie finde ich raus, ob der in die nächste Zeile muss? bzw. wie finde ich heraus bei welcher Position im String die Zeile auf dem Schirm anfängt? (das wäre ja der nötige Schritt)
Diese Position müsste sich doch aus den verwendeten Werten errechnen lassen, ggf. muss dafür ein früherer Wert gerettet werden, falls ein Wert nicht mehr vorhanden ist um die Berechnung vorzunehmen. Ohne Codebeispiel fällt es mir jedoch immer schwer solche Probleme woran ich nicht aktuell selber arbeite zu erkennen.

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

Re: TUI programmieren [C]

Beitrag von oDOSseus »

Ich könnte ne Routine schreiben um für eine ganz bestimmte Zeile die Position im String zu bestimmen, wo sie gebrochen wird.
Diese Position merk ich mir dann und wenn der cursor sie erreicht, wird er umgebrochen.
Poroblem: Ich muss diese Poition bei jedem Druck neu bestimmen und dabei ja alle vorangegangenen Zeilenbrüche analysieren.
Lösung:
Ich merke mir auch die Stelle wo die Zeile anfängt und berechne dann immer neu anhand dieser Stelle, wo der umbruch stattfindet. Klingt das intelligent? Ich bin mir noch nich so sicher.
freecrac
DOS-Guru
Beiträge: 836
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: TUI programmieren [C]

Beitrag von freecrac »

oDOSseus hat geschrieben:Ich könnte ne Routine schreiben um für eine ganz bestimmte Zeile die Position im String zu bestimmen, wo sie gebrochen wird.
Diese Position merk ich mir dann und wenn der cursor sie erreicht, wird er umgebrochen.
Poroblem: Ich muss diese Poition bei jedem Druck neu bestimmen und dabei ja alle vorangegangenen Zeilenbrüche analysieren.
Lösung:
Ich merke mir auch die Stelle wo die Zeile anfängt und berechne dann immer neu anhand dieser Stelle, wo der umbruch stattfindet. Klingt das intelligent? Ich bin mir noch nich so sicher.
Das hört sich gut an.

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

Re: TUI programmieren [C]

Beitrag von oDOSseus »

Die Motivation is sehr klein immo, weil die textearea mehr stress als spaß macht und die Ferien werde ich mit Praktikum und lernen verbringen. Demnach wird sich das hinziehen.
ich WERDE es 100 PROZENTIG vollenden. dauert halt nur.

mfG
freecrac
DOS-Guru
Beiträge: 836
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: TUI programmieren [C]

Beitrag von freecrac »

oDOSseus hat geschrieben:Die Motivation is sehr klein immo, weil die textearea mehr stress als spaß macht und die Ferien werde ich mit Praktikum und lernen verbringen. Demnach wird sich das hinziehen.
ich WERDE es 100 PROZENTIG vollenden. dauert halt nur.

mfG
Gut zu wissen, ich kann warten so lange es eben dauert. Rom ist auch nicht an einem Tag erbaut worden.

Dirk
Antworten