#!/bin/awk -f # FUCKTRAIN: FUCKAMUTHA CHOO CHOO -*- awk -*- # Author: Case Duckworth # License: WTFPL # Version: #9 ### Commentary: # FUCKTRAIN turns brainfuck code into trainfuck code. ### Code: BEGIN { buffer = "" fold_width = 70 width = 0 } { buffer = buffer $0 "\n" } END { sub(/^[ \t\n\r\f]+/, "", buffer) sub(/[ \t\n\r\f]+$/, "", buffer) split(buffer, bufa, "") boarded = 0 header = 1 for (c in bufa) { if (bufa[c] == "[" && header) { header++ if (header == 2) { c++ } } if (bufa[c] == "]" && header) { header-- if (header == 1) { header = 0 c++ } } if (! boarded && ! header && bufa[c] ~ /[-+<>.,\[\]]/) { printf "\n%s\n", "ALL ABOARD" boarded = 1 } if (boarded) { if (width > fold_width) { print "" width = 0 } if (bufa[c] == ">") { printf "%s", "choo\n" } else if (bufa[c] == "<") { printf "%s", "choo choo\n" } else if (bufa[c] == "+") { printf "%s", "chug " width += 5 } else if (bufa[c] == "-") { printf "%s", "chugga " width += 7 } else if (bufa[c] == ".") { click = clickety_click() printf "%s", click width += length(click) } else if (bufa[c] == ",") { printf "%s", "clack " width += 6 } else if (bufa[c] == "[") { printf "%s", "tickets please " width += 15 } else if (bufa[c] == "]") { printf "%s", "your ticket please " width += 19 } else if (bufa[c] ~ /[\n]/) { printf "%s", bufa[c] width = 0 } else { printf "\n%s\n%s", "END OF THE LINE", bufa[c] boarded = 0 } } else { width = 0 printf "%s", bufa[c] } } print "" if (boarded) { print "END OF THE LINE" } } function clickety_click() { if (rand() <= 0.5) { return "clickety " } else { return "click " } }