ML/I Makro-Prozessor
2026-03-15-14-58 (ml1, macros, upper-case)
Umwandlung von Zeichenketten in ML/I [1]. Heute wandeln wir Klein- in Großbuchstaben um.
upper.ml1
MCSKIP MT,[]
MCINS \.
MCDEF UPPER WITH { } AS [MCSET S13=1
MCDEF a AS A
MCDEF b AS B
MCDEF c AS C
MCDEF d AS D
MCDEF e AS E
MCDEF f AS F
MCDEF g AS G
MCDEF h AS H
MCDEF i AS I
MCDEF j AS J
MCDEF k AS K
MCDEF l AS L
MCDEF m AS M
MCDEF n AS N
MCDEF o AS O
MCDEF p AS P
MCDEF q AS Q
MCDEF r AS R
MCDEF s AS S
MCDEF t AS T
MCDEF u AS U
MCDEF v AS V
MCDEF w AS W
MCDEF x AS X
MCDEF y AS Y
MCDEF z AS Z
\L1.MCDEF [MYLETTER] AS MCSUB(\A1.,\S13.,\S13.)
MCSET S13=\S13.+1
MYLETTER[]MCGO L1 UNLESS \S13. GR MCLENG(\A1.)
]
UPPER{Kleine Dinge werden richtig gross!}
$ ml1 upper.ml1 KLEINE DINGE WERDEN RICHTIG GROSS!
Vielleicht gibt es eine einfachere Lösung, aber diese funktioniert immerhin, solange man im Bereich der ASCII-Zeichen bleibt. Eine Lösung für UTF-8 bleibt dem Leser überlassen.
Prinzipiell lassen sich Ersetzungen von Umlauten einfach definieren:
umlaut.ml1
MCINS \.
MCSKIP MT,[]
MCDEF UTFASCII WITH { } AS [MCDEF Ã WITH ¤ AS ae
MCDEF Ã WITH ¶ AS oe
MCDEF Ã WITH ¼ AS ue
MCDEF Ã WITH Ÿ AS ss
MCDEF MYSTRING AS \A1.
MYSTRING]
UTFASCII{ä ö ü ß}
$ ml1 umlaut.ml1 ae oe ue ss
Nur funktioniert das natürlich nicht, wenn man wie in upper.ml1 byteweise durch die Zeichenkette durchgeht. In umlaut.ml1 müssen für die Makrodefinition die beiden Bytes der Umlaute getrennt eingegeben werden, wie im Hexdump ersichtlich:
$ hexdump -C umlaut.ml1
hexdump
00000000 4d 43 49 4e 53 20 5c 2e 0a 4d 43 53 4b 49 50 20 |MCINS \..MCSKIP |
00000010 4d 54 2c 5b 5d 0a 4d 43 44 45 46 20 55 54 46 41 |MT,[].MCDEF UTFA|
00000020 53 43 49 49 20 57 49 54 48 20 7b 20 7d 20 41 53 |SCII WITH { } AS|
00000030 20 5b 4d 43 44 45 46 20 c3 20 57 49 54 48 20 a4 | [MCDEF . WITH .|
00000040 20 41 53 20 61 65 0a 4d 43 44 45 46 20 c3 20 57 | AS ae.MCDEF . W|
00000050 49 54 48 20 b6 20 41 53 20 6f 65 0a 4d 43 44 45 |ITH . AS oe.MCDE|
00000060 46 20 c3 20 57 49 54 48 20 bc 20 41 53 20 75 65 |F . WITH . AS ue|
00000070 0a 4d 43 44 45 46 20 c3 20 57 49 54 48 20 9f 20 |.MCDEF . WITH . |
00000080 41 53 20 73 73 0a 4d 43 44 45 46 20 4d 59 53 54 |AS ss.MCDEF MYST|
00000090 52 49 4e 47 20 41 53 20 5c 41 31 2e 0a 4d 59 53 |RING AS \A1..MYS|
000000a0 54 52 49 4e 47 5d 0a 55 54 46 41 53 43 49 49 7b |TRING].UTFASCII{|
000000b0 c3 a4 20 c3 b6 20 c3 bc 20 c3 9f 7d 0a |.. .. .. ..}.|
000000bd