diff options
Diffstat (limited to 'fucktrain.awk')
-rwxr-xr-x | fucktrain.awk | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/fucktrain.awk b/fucktrain.awk new file mode 100755 index 0000000..4ab5f5b --- /dev/null +++ b/fucktrain.awk | |||
@@ -0,0 +1,97 @@ | |||
1 | #!/bin/awk -f | ||
2 | # FUCKTRAIN: FUCKAMUTHA CHOO CHOO -*- awk -*- | ||
3 | # Author: Case Duckworth <acdw@acdw.net> | ||
4 | # License: WTFPL | ||
5 | # Version: #9 | ||
6 | |||
7 | ### Commentary: | ||
8 | |||
9 | # FUCKTRAIN turns brainfuck code into trainfuck code. | ||
10 | |||
11 | ### Code: | ||
12 | BEGIN { | ||
13 | buffer = "" | ||
14 | fold_width = 70 | ||
15 | width = 0 | ||
16 | } | ||
17 | |||
18 | { | ||
19 | buffer = buffer $0 "\n" | ||
20 | } | ||
21 | |||
22 | END { | ||
23 | sub(/^[ \t\n\r\f]+/, "", buffer) | ||
24 | sub(/[ \t\n\r\f]+$/, "", buffer) | ||
25 | split(buffer, bufa, "") | ||
26 | boarded = 0 | ||
27 | header = 1 | ||
28 | for (c in bufa) { | ||
29 | if (bufa[c] == "[" && header) { | ||
30 | header++ | ||
31 | if (header == 2) { | ||
32 | c++ | ||
33 | } | ||
34 | } | ||
35 | if (bufa[c] == "]" && header) { | ||
36 | header-- | ||
37 | if (header == 1) { | ||
38 | header = 0 | ||
39 | c++ | ||
40 | } | ||
41 | } | ||
42 | if (! boarded && ! header && bufa[c] ~ /[-+<>.,\[\]]/) { | ||
43 | printf "\n%s\n", "ALL ABOARD" | ||
44 | boarded = 1 | ||
45 | } | ||
46 | if (boarded) { | ||
47 | if (width > fold_width) { | ||
48 | print "" | ||
49 | width = 0 | ||
50 | } | ||
51 | if (bufa[c] == ">") { | ||
52 | printf "%s", "choo\n" | ||
53 | } else if (bufa[c] == "<") { | ||
54 | printf "%s", "choo choo\n" | ||
55 | } else if (bufa[c] == "+") { | ||
56 | printf "%s", "chug " | ||
57 | width += 5 | ||
58 | } else if (bufa[c] == "-") { | ||
59 | printf "%s", "chugga " | ||
60 | width += 7 | ||
61 | } else if (bufa[c] == ".") { | ||
62 | click = clickety_click() | ||
63 | printf "%s", click | ||
64 | width += length(click) | ||
65 | } else if (bufa[c] == ",") { | ||
66 | printf "%s", "clack " | ||
67 | width += 6 | ||
68 | } else if (bufa[c] == "[") { | ||
69 | printf "%s", "tickets please " | ||
70 | width += 15 | ||
71 | } else if (bufa[c] == "]") { | ||
72 | printf "%s", "your ticket please " | ||
73 | width += 19 | ||
74 | } else if (bufa[c] ~ /[\n]/) { | ||
75 | printf "%s", bufa[c] | ||
76 | width = 0 | ||
77 | } else { | ||
78 | printf "\n%s\n%s", "END OF THE LINE", bufa[c] | ||
79 | boarded = 0 | ||
80 | } | ||
81 | } else { | ||
82 | width = 0 | ||
83 | printf "%s", bufa[c] | ||
84 | } | ||
85 | } | ||
86 | print "" | ||
87 | } | ||
88 | |||
89 | |||
90 | function clickety_click() | ||
91 | { | ||
92 | if (rand() <= 0.5) { | ||
93 | return "clickety " | ||
94 | } else { | ||
95 | return "click " | ||
96 | } | ||
97 | } | ||