|
|
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.