|
|
1.1 root 1: # ESCAPE(2)
2: #
3: # Interpret Icon literal strings
4: #
5: # William H. Mitchell
6: #
7: # Last modified 8/14/84
8: #
9:
10: procedure escape(s)
11: static digits
12: initial digits := '0123456789'
13: ns := ""
14: s ? while c := move(1) do {
15: ns ||:=
16: if c == "\\" then
17: case c2 := (move(1) | "") of {
18: "b": "\b"
19: "d": "\d"
20: "e": "\e"
21: "f": "\f"
22: "l": "\l"
23: "n": "\n"
24: "r": "\r"
25: "t": "\t"
26: "v": "\v"
27: "\'": "\'"
28: "\"": "\""
29: "x": hexcode(move(2))
30: "^": ctrlcode(move(1))
31: any(digits,c2) & c2: octcode(c2 || move(2))
32: "": c
33: default: {move(-1); c}
34: }
35: else c
36: }
37: return ns
38: end
39:
40: procedure hexcode(s)
41: return &cset[integer("16r" || s) + 1]
42: end
43:
44: procedure octcode(s)
45: return &cset[integer("8r" || s) + 1]
46: end
47:
48: procedure ctrlcode(s)
49: return &cset[find(map(s),&lcase) + 1]
50: end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.