Seite 1 von 3

LF = $0D und $0A

Verfasst: Fr 30. Dez 2011, 01:07
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:

Re: LF = $0D und $0A

Verfasst: Fr 30. Dez 2011, 11:35
von drohne235
Und was hindert dich daran einfach $0d zu verwenden? :?:

Re: LF = $0D und $0A

Verfasst: Fr 30. Dez 2011, 11:46
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.

Re: LF = $0D und $0A

Verfasst: Fr 30. Dez 2011, 13:13
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.

Re: LF = $0D und $0A

Verfasst: Fr 30. Dez 2011, 21:04
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.

Re: LF = $0D und $0A

Verfasst: Fr 30. Dez 2011, 23:37
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.

Re: LF = $0D und $0A

Verfasst: Fr 30. Dez 2011, 23:56
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.

Re: LF = $0D und $0A

Verfasst: Sa 31. Dez 2011, 00:34
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:

Re: LF = $0D und $0A

Verfasst: Sa 31. Dez 2011, 01:06
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.

Re: LF = $0D und $0A

Verfasst: Sa 31. Dez 2011, 01:25
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