about summary refs log tree commit diff stats
path: root/fucktrain.awk
diff options
context:
space:
mode:
Diffstat (limited to 'fucktrain.awk')
-rwxr-xr-xfucktrain.awk97
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:
12BEGIN {
13 buffer = ""
14 fold_width = 70
15 width = 0
16}
17
18{
19 buffer = buffer $0 "\n"
20}
21
22END {
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
90function clickety_click()
91{
92 if (rand() <= 0.5) {
93 return "clickety "
94 } else {
95 return "click "
96 }
97}