SDCC und Strings mit Umlauten

Gast #1947784
Lesenswert?

Hallo Forumsmitglieder,

ich bin gerade dabei ein umfangreiches Programm von Pascal nach C zu 
portieren. Im Programm werden viele Textstrings in verschiedenen 
Sprachen verwendet. Ich habe mir ein array of struct gebaut das im 
Codebereich abgelegt wird. Nun ist es aber so, dass die Strings auch 
Umlaute enthalten, mit denen kommt der SDCC aber anscheinend nicht 
zurecht. Hier ein Ausschnitt in C:
1
 
2
    {0x1A,"Halterung          ",0x06,0x09,0x00},
3
    {0x00,"fr Folien-        ",0x00,0x0A,0x00},
4
    {0x00,"aufnahme           ",0x00,0x08,0x00},
5
    {0x00,"nach oben          ",0x00,0x09,0x00},
6
    {0x00,"rechts             ",0x00,0x06,0x00},
7
    {0x00,"schwenken          ",0x00,0x09,0x00},

und das macht der Compiler daraus:
1
.db #0x1A  ; 26
2
  .ascii "Halterung          "
3
  .db 0x00
4
  .db #0x06  ; 6
5
  .db #0x09  ; 9
6
  .db #0x00  ; 0
7
  .db #0x00  ; 0
8
  .ascii "f"
9
  .db 0xFC
10
  .ascii "r Folien-        "
11
  .db 0x00
12
  .db #0x00  ; 0
13
  .db #0x0A  ; 10
14
  .db #0x00  ; 0
15
  .db #0x00  ; 0
16
  .ascii "aufnahme           "
17
  .db 0x00
18
  .db #0x00  ; 0
19
  .db #0x08  ; 8
20
  .db #0x00  ; 0
21
  .db #0x00  ; 0
22
  .ascii "nach oben          "
23
  .db 0x00
24
  .db #0x00  ; 0
25
  .db #0x09  ; 9
26
  .db #0x00  ; 0
27
  .db #0x00  ; 0
28
  .ascii "rechts             "
29
  .db 0x00
30
  .db #0x00  ; 0
31
  .db #0x06  ; 6
32
  .db #0x00  ; 0
33
  .db #0x00  ; 0
34
  .ascii "schwenken          "
35
  .db 0x00
36
  .db #0x00  ; 0
37
  .db #0x09  ; 9
38
  .db #0x00  ; 0

Das erste Byte im struct ist die Nummer des Textes, dann kommt der Text 
als
String, danach Anzahl der Zeilen, die eigentliche Länge des Strings und 
ein Teiler, der woanders im Programm Verwendung findet.

Weiß jemand, wie ich dem SDCC die ASCII-Zeichen für Umlaute beibringen 
kann?

Gruß Stefan
#1947793
Lesenswert?

StefanK. schrieb:
>... ich dem SDCC die ASCII-Zeichen ...

Da ist das Problem. ASCII hat keine Umlaute.

der SDCC ignoriert das und hat exakt das "0xFC", dass in deinem 
Quelltext anstelle des 'ü' steht, in den ASM-Code übernomen.

Lösung => Speicher deinen Quelltext in dem Zeichensatz ab, den du 
nachher auch in deinen ASM-String-Konstanten haben willst.
Gast #1947972
Lesenswert?

Hallo,

ANSI, ASCII, ISO ... alles zum Haareraufen. Ich habe jetzt folgendes 
gemacht:
1
{0x1A,"Halterung          ",0x06,0x09,0x00},
2
    {0x00,"fr Folien-        ",0x00,0x0A,0x00},
3
    {0x00,"aufnahme           ",0x00,0x08,0x00},

Das Zeichen, das hier an Stelle des "ü" erscheint, ist das Zeichen, das 
im Editor erscheint wenn man über die Zifferntasten mit gedrückter 
ALT-Taste die Zahl 0129 eingibt.

Der Compiler macht folgendes daraus:
1
.db #0x1A  ; 26
2
  .ascii "Halterung          "
3
  .db 0x00
4
  .db #0x06  ; 6
5
  .db #0x09  ; 9
6
  .db #0x00  ; 0
7
  .db #0x00  ; 0
8
  .ascii "f"
9
  .db 0xC2
10
  .db 0x81
11
  .ascii "r Folien-        "
12
  .db #0x00  ; 0
13
  .db #0x0A  ; 10
14
  .db #0x00  ; 0
15
  .db #0x00  ; 0
16
  .ascii "aufnahme           "

Er hat jetzt den richtigen Wert 0x81 eingefügt, aber wo kommt das 0xC2 
her?

Gruß Stefan
Gast #1948021
Lesenswert?

Hallo Rufus, Karlheinz und die Anderen,

danke für Eure Hilfe, es hat jetzt geklappt, der Editor war tatsächlich 
noch auf UTF-8, keine Ahnung warum, hatte das vorhin vermutlich mal 
umgestellt.

Es funktioniert jetzt wenn man mit ALT + Ziffernblock den ASCII-Code 
eingibt, dann hat man zwar im Editor komische Zeichen, aber im Code 
stimmt es dann.

Gruß Stefan

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren