( O = Output string I = Input string S = Subleq code ) [ stack 0 ] is ip ( --> s ) [ stack 0 ] is a ( --> s ) [ stack 0 ] is b ( --> s ) [ stack 0 ] is c ( --> s ) [ over $ "" = iff 0 else [ swap behead dip swap ] swap b share poke ] is getch ( O I S --> O I S ) [ dup a share peek dip rot join unrot ] is putch ( O I S --> O I S ) [ $ "" unrot 0 ip replace [ dup ip share 2dup peek a replace 2dup 1 + peek b replace 2 + peek c replace 3 ip tally a share -1 = iff getch again b share -1 = iff putch again dup b share peek over a share peek - tuck dip [ b share poke ] 1 < until c share dup ip replace 0 < until ] 2drop ] is subleq ( I S --> O ) $ "" ' [ 15 17 -1 17 -1 -1 16 1 -1 16 3 -1 15 15 0 0 -1 72 101 108 108 111 44 32 119 111 114 108 100 33 13 0 ] subleq echo$