WideStrings in DOS? Möglich oder nicht?

Hier dürfen auch unregistrierte Besucher posten.
Antworten
fragender

WideStrings in DOS? Möglich oder nicht?

Beitrag von fragender »

Hallo,

Gibt es in DOS heutzutage Anwendungen für DOS die mit Widestrings arbeiten, diese verwenden? Wie schaut es mit Ansistrings und Unicodestrings aus?
DOSferatu
DOS-Übermensch
Beiträge: 1220
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: WideStrings in DOS? Möglich oder nicht?

Beitrag von DOSferatu »

Ansi und Unicode habe ich schon in diversen meiner Tools benutzt. Auch extralange Strings benutze ich ab und zu mal, wenn sich's ergibt. (Oder meinst Du diese Strings, wo ein Zeichen immer 16bit braucht?)
Kann man aber alles programmieren, wenn nötig. Wieso die Frage?
fragender

Re: WideStrings in DOS? Möglich oder nicht?

Beitrag von fragender »

Danke DOSFeratu für die Antwort. Ja ich meine die 16Bit Strings. Ich habe da eine Unit für ObjectPascal in Arbeit, die auch in DOS nutzbar werden soll und dazu muss ich das wissen. Nämlich, ob sich der Aufwand lohnt, diese 16 bittigen Strings zu berücksichtigen.
DOSferatu
DOS-Übermensch
Beiträge: 1220
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: WideStrings in DOS? Möglich oder nicht?

Beitrag von DOSferatu »

Ich habe mich noch nicht so mit FreePascal beschäftigt. Vielleicht werden sie da unterstützt?

Das "normale" Borland Turbo Pascal unterstützt sie nicht (dafür ist es zu alt), soweit ich weiß unterstützt es aber (neben den normalen "Pascal"-Strings mit Längenbyte an Offset 0) auch so nullterminierte (aber 8bit) Strings (in so Windows-Unit). Ich selbst kann mit nullterminierten Strings nicht viel anfangen, finde sie zu "unhandlich".
Aber: Alles, was Pascal nicht von sich aus unterstützt, kann man ja selbst mit eigenen Routinen/Formaten supporten. Ein String ist ja in Wirklichkeit nur ein Array of Byte - oder dann eben of Word. Turbo-Pascal selbst supportet aber von sich aus nur Datentypen mit maximal 64 kByte größe (-1).

Diese 16bit-Strings dienen ja ausschließlich dazu, auch die "höheren" Zeichen zu benutzen, also quasi "Unicode". Wenn man sowieso nur Text in ASCII benutzt und keine entsprechenden "fremden Sonderzeichen", lohnt sich (zumindest meiner Meinung nach) der Support der 16bit Strings nicht: Er erhöht den Speicherverbrauch UND den Rechenaufwand UND erfordert zusätzliche selbstgebaute Routinen. Und wenn alle Zeichen <256 bleiben, erzeugt man nur 16bit Strings, deren Highbytes 0 sind, d.h. füllt die Hälfte des Speichers mit Nullen. SOLLTE das so sein, wäre wohl die bessere Wahl, alles auf 8bit auszulegen und beim Einlesen die oberen Nullen wegzulassen und beim Zurückschreiben nach jedem Zeichen wieder eine 0 zu schreiben.

Der Vorteil der "Wide-Strings" gegenüber z.B. UTF-8 ist, daß man bei ersteren immer weiß, wie lang sie sind, ohne die Zeichen einzeln prüfen zu müssen, während z.B. bei UTF-8 alle Zeichen ab 128 eine variable Größe (in Bytes) haben können, weil es ja quasi eine "gepackte" (und zu ASCII7 abwärtskompatible) Variante ist, "Unicode" zu supporten.

Bei 16bit-Zeichen ODER Unicode kommt aber auch noch hinzu, daß man natürlich auch (grafische?) Zeichensätze mit mehr als 256 Zeichen definieren/erstellen muß, um sie auszugeben/verwenden zu können (aus so Unicode-Tabellen). Der Textmode z.B. erlaubt nur maximal 256 Zeichen (im "Normalzustand") oder 512 Zeichen (unter Opferung eines Bits für Vorzeichenfarbe) gleichzeitig. Angeblich soll es auch noch eine China-Variante geben, die Textmode mit 65536 Zeichen erlaubt - habe ich aber noch nie gesehen und weiß nicht, wie man den ansteuert und ob dann immer noch verschiedene Farben möglich sind.

Also, meine Meinung dazu ist: Uneindeutig. Es kommt immer auf den Verwendungszweck an. Gerade unter "DOS", mit seiner Begrenzung des Speichers (<640 Heap) und auch älteren Systemen, muß natürlich auch der begrenzte Speicher/Rechenpower berücksichtigt werden. Man kann z.B. so Strings in Größen von 64 kByte bauen oder (es gibt in Windows inzwischen auch ein 32bit.String-Format), von knapp 4 Gbyte. Und dann kann man auch einen ganzen Text in einem EINZIGEN String ablegen. Klingt für so "Hochsprachen/Skriptsprachen"-Coder ja erstmal praktisch, weil man damit (vom Aussehen her) "eleganten Code" erzeugen kann. Dabei sollte man aber immer im Hinterkopf behalten, daß selbst die heutigen (PC-) CPUs immer noch linearen Code benutzen und alle darüber hinaus gehenden Code-Konstrukte, die in Hoch-/Skript-Sprachen erfunden/benutzt werden, wie z.B. Objektorientierte Programmierung, unter Speicher-/Rechenzeitverbrauch intern in "nativen"/"linearen" Code umgesetzt werden. Wenn man also in so einem "Riesentext-String" irgendwo Zeichen/Zeilen einfügt/löscht, erzeugt das intern riesige Speicherverschieberei.

Zu so nullterminierten "Riesentext-Strings":
Meiner (natürlich wieder rein subjektiven!) Meinung nach, ist es besser, hier (natürlich auch wieder je nach Anwendung), angepaßte Routinen zu verwenden, die diese z.B. intern zeilenweise aufgliedern und mit Pointern arbeiten.

OK, da ich nicht wissen kann, was die letztendliche Anwendung dafür sein soll, ist alles, was ich jetzt dazu geschrieben habe, natürlich nur eine ungeordnete (unvollständige) Auflistung meiner Gedanken dazu für die verschiedenen Möglichkeiten. Ich selbst bemühe mich - je nach Anwendung - immer um einen Trade-Off zwischen Speicherverbrauch und Rechenaufwand, so daß weder das eine noch das andere in's Extrem ausartet. Aber das ist natürlich auch dem Zielsystem geschuldet, auf dem ich arbeite (16bit-DOS).

Das war erst einmal mein Senf dazu. Vielleicht kannst Du daraus irgend einen Nutzen für Deine Vorhaben ziehen.
fragender

Re: WideStrings in DOS? Möglich oder nicht?

Beitrag von fragender »

Danke erst mal für die ausführliche Antwort. Da werd ich besser versuchen nur ein Widestring Interface verfügbar zu machen, die Widestrings nach der Übergabe an die jeweiligen Routinen dann intern in 8 Bit Strings zu konvertieren. Wer dann die Routinen nutzt muss halt die englische Sprache verwenden um mit den Routinen arbeiten zu können.
fragender

Re: WideStrings in DOS? Möglich oder nicht?

Beitrag von fragender »

Danke erst mal für die ausführliche Antwort. Da werd ich besser versuchen nur ein Widestring Interface verfügbar zu machen, die Widestrings nach der Übergabe an die jeweiligen Routinen dann intern in 8 Bit Strings zu konvertieren. Wer dann die Routinen nutzt muss halt die englische Sprache verwenden um mit den Routinen arbeiten zu können. Ist nichts was Strings nach außen an den Benutzer ausgibt.
fragender

Re: WideStrings in DOS? Möglich oder nicht?

Beitrag von fragender »

#### Moderatoren: Bitte das Doppelposting einmal löschen! ####
Antworten