LF = $0D und $0A

Du hast ein Betriebssystem für den Hive geschrieben oder beschäftigst dich mit den grundlegenden Systemfunktionen, dann bist du hier richtig!
Benutzeravatar
PIC18F2550
Beiträge: 2832
Registriert: Fr 30. Sep 2011, 13:08

LF = $0D und $0A

Beitrag von PIC18F2550 »

Hallo,
ich habe versucht einen text auszugeben leider ist das ergebnis nicht so wie gewünscht.

Code: Alles auswählen

PUB Test
    ios.print(@hlp01)

DAT 'Kommandostrings
hlp01       file  "help.txt"
            byte   $0d,0
"help.txt" Inhalt

Code: Alles auswählen

Monitorbefehle
A  aaaa
B  bbbb
Anzeige auf Monitor

Code: Alles auswählen

Monitorbefehle A  aaaa B  bbbb
Die Ursache ist das der HIVE $0D als Zeilenumbruch verwendet.
Aber BST, MC-Editor, und gEdit aber das Zeichen $0A.

Zeichendefinition

Code: Alles auswählen

0x0A 	^J 	\n 	LF 	␊ 	FE 	Line Feed 	Zeilenvorschub 	Bewegt den Druckkopf/Cursor in die nächste Zeile. Wenn zwischen Sender und Empfänger abgesprochen, bedeutet es „New Line“, wobei die erste Druckposition der nächsten Zeile angefahren wird. Wird unter Unix und Mac OS X als „Zeilenendezeichen“ benutzt. Unter Microsoft Windows wird mit der Kombination „Carriage Return“ + „Line Feed“ eine Zeile beendet.

Code: Alles auswählen

0x0D 	^M 	\r 	CR 	␍ 	FE 	Carriage Return 	Wagenrücklauf 	Bewegt den Druckkopf/Cursor zurück in die erste Druckposition der aktuellen Zeile. Wurde von Mac OS bis Version 9 als Zeilenendezeichen („New line“) benutzt. Unter Microsoft Windows wird mit der Kombination „Carriage Return“ + „Line Feed“ eine Zeile beendet.
Ich glaub jetzt sitzen wir zwischen zwei Stühlen? :oops:

Vieleicht könnte mann $0A bei der ausgabe wie $0D behandeln?

:mrgreen: :mrgreen: Habe $0A bei der ausgabe wie $0D gemacht und es funktioniert. :mrgreen: :mrgreen: :mrgreen:
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: LF = $0D und $0A

Beitrag von drohne235 »

Und was hindert dich daran einfach $0d zu verwenden? :?:
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Benutzeravatar
PIC18F2550
Beiträge: 2832
Registriert: Fr 30. Sep 2011, 13:08

Re: LF = $0D und $0A

Beitrag von PIC18F2550 »

Die Editoren verwenden kein $0d sondern $0A als Zeilenumbruch.
Ich müsste alle Textfiles mit einem HEX-Editor nacharbeiten. :oops:

$0A wie $0D im Belatrixtreiber behandeln und schon ist das Problem kein Problem mehr.
Ist ein geschichtliches Überbleibsel von UNIX,Windows und MAC.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: LF = $0D und $0A

Beitrag von drohne235 »

Die Editoren verwenden kein $0d sondern $0A als Zeilenumbruch.
Naja, so würde ich das nicht formulieren. Die meisten Editoren wie Notepad, Wordpad PSPad und das Propellertool setzen ein $0d $0a ein. BST ist da mehr die Ausnahme und verwendet nur $0a. Das ist auch der Grund warum es mir bisher nicht aufgefallen ist, denn alle in die Quellen eingebundenen Hilfetexte habe ich mit dem Notepad geschrieben - da wäre mir ein Fehlverhalten schon aufgefallen.

Aber ich verstehe worauf du hinaus willst, sehe aber ein anderes Problem: Wenn ich auch auf $0a gleich reagiere, funktioniert zwar BST, aber bei allen anderen Programmen gibt es dafür zwei Zeilenvorschübe, da sie ja die Sequenz $0a $0d verwenden. Richtig wäre, wenn $0a wirklich nur ein Zeilenvorschub, und $0d ein Wagenrücklauf wäre. Aber in diesem Fall würde wieder BST nicht mehr funktionieren, denn er schreibt nur ein $0a und kein $0d.
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Benutzeravatar
PIC18F2550
Beiträge: 2832
Registriert: Fr 30. Sep 2011, 13:08

Re: LF = $0D und $0A

Beitrag von PIC18F2550 »

Ich arbeite nicht mit Windows sondern mit Linux und da steht immer nur $0A.
Tut mir leid ist aber so. :twisted:

So'n Quatsch kann blos mir einfallen -->>"Stell doch den Code von $0d in $0a dann sollte es doch auch gehen? :?:"

Das geht natürlich nicht! in den Belatrix code muss ein Merker der nach $0d das darauf volgende $0a überspringt aber sonst alles ausgibt.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: LF = $0D und $0A

Beitrag von drohne235 »

Ist richtig, einfach auf $0a ändern bringt mir dann Ärger mit den MAC-Usern. Wenn ich Zeit habe füge ich einen Marker ein, dass sollte funktionieren.
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Benutzeravatar
PIC18F2550
Beiträge: 2832
Registriert: Fr 30. Sep 2011, 13:08

Re: LF = $0D und $0A

Beitrag von PIC18F2550 »

Habe's mal gemacht und getestet :mrgreen:

Code: Alles auswählen

VAR
  word  lchar                                           'letztes zeichen

PUB print_char(c) | code,n                              'screen: zeichen auf bildschirm ausgeben
{{zeichen auf bildschirm ausgeben}}
  if c == $0a and lchar == $0d
    c := 0
  lchar := c
  case c
    ...
    $0A:                                                'LF
      if curstat[wscrnr] == 1
        schar($20)
      newline
      if curstat[wscrnr] == 1
        schar(cursor[wscrnr])
    $0D:                                                'return?
      if curstat[wscrnr] == 1
        schar($20)
      newline
      if curstat[wscrnr] == 1
        schar(cursor[wscrnr])
   ...
DSCI0005.JPG
Das sollte den Linux,Mac und Windows nutzern reichen.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
PIC18F2550
Beiträge: 2832
Registriert: Fr 30. Sep 2011, 13:08

Re: LF = $0D und $0A

Beitrag von PIC18F2550 »

Neuer Wahnsinn mit den Umlauten.
DSCI0006.JPG
diese werden in 2 Byts definiert
Ä = C3 84
Ö = C3 93
Ü = C3 9C
ä = C3 A4
ö = C3 B6
ü = C3 BC
ß = C3 9F
Wie sieht das unter Windows Aus?

Wie es aussieht brauchen wir einen 2. Merker :evil:
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: LF = $0D und $0A

Beitrag von drohne235 »

Den Marker werd ich mal einfügen, das ist noch überschaubar.

Über Anpassungen bezüglich der Umlaute würde ich nicht nachdenken, da sind sich die fetten Systeme untereinander ja auch nicht grün. Warum also gerade den Hive mit seinen winzigen Ressourcen damit zumüllen, um gerade ihn mit den Dinosauriern kompatibel zu machen?

Da sträuben sich mir irgendwie die Haare! Vielleicht brauchen wir ja auch einfach nur einen Texteditor auf dem Hive, oder ein kleines Tool als Textfilter? :mrgreen: Oder halt einfach im MSDOS-Format speichern.
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Benutzeravatar
kuroneko
Beiträge: 202
Registriert: Sa 22. Okt 2011, 13:05
Wohnort: FN, Germany

Re: LF = $0D und $0A

Beitrag von kuroneko »

PIC18F2550 hat geschrieben:Ä = C3 84
Ö = C3 93
Ü = C3 9C
ä = C3 A4
ö = C3 B6
ü = C3 BC
ß = C3 9F
Das ist ganz einfach UTF-8 kodiert. Nicht alles in dieser Welt ist ASCII ...

Code: Alles auswählen

$C3 $84 -> %110_00011 %10_000100
                ----+     -----+
                    |          |
                    %00011000100
                       %11000100 -> $C4
Antworten