Skip to content

Instantly share code, notes, and snippets.

@empijei
Created April 16, 2016 20:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save empijei/b1586fdfb27d51956713af298988ed61 to your computer and use it in GitHub Desktop.
Save empijei/b1586fdfb27d51956713af298988ed61 to your computer and use it in GitHub Desktop.
package main
import (
"bufio"
"flag"
"fmt"
"net"
"os"
"strconv"
"strings"
)
const invalidMorse = "3omfmpc5pax8us3y67aasu"
const validMorse = "1kgv0qzpgvyt94ip"
var stone = map[string]string{"a": ".-", "b": "-...", "c": "-.-.", "d": "-..", "e": ".", "f": "..-.", "g": "--.", "h": "....", "i": "..", "j": ".---", "k": "-.-", "l": ".-..", "m": "--", "n": "-.", "o": "---", "p": ".--.", "q": "--.-", "r": ".-.", "s": "...", "t": "-", "u": "..-", "v": "...-", "w": ".--", "x": "-..-", "y": "-.--", "z": "--..", "0": "-----", "1": ".----", "2": "..---", "3": "...--", "4": "....-", "5": ".....", "6": "-....", "7": "--...", "8": "---..", "9": "----."}
var morse map[string]string
var brutal = flag.Int("brutal", -1, "this is to collect charaters")
var uppercase = flag.Bool("uppercase", false, "this is to use uppercase letters in decoding")
var encode = flag.String("encode", "", "This will encode the given string and exit")
var decode = flag.String("decode", "", "This will decode the given string and exit")
func init() {
morse = make(map[string]string)
for key, val := range stone {
morse[val] = key
}
flag.Parse()
}
func main() {
if *brutal > 0 {
brutalReader()
return
}
if len(*decode) > 0 {
fmt.Println(morseToAlph(*decode))
return
}
if len(*encode) > 0 {
fmt.Println(alphToMorse(*encode))
return
}
interactive()
}
func interactive() {
conn, err := net.Dial("tcp", "morset.pwning.xxx:11821")
if err != nil {
fmt.Println(err)
return
}
remoteReader := bufio.NewReader(conn)
stdin := bufio.NewReader(os.Stdin)
for {
line, err := remoteReader.ReadString('\n')
if err != nil {
fmt.Println(err)
break
}
fmt.Println(line)
fmt.Println(morseToAlph(line[:len(line)-1]))
prompt()
input, _ := stdin.ReadString('\n')
morseString := alphToMorse(input)
morseString += "\n"
i, _ := fmt.Fprintf(conn, morseString)
fmt.Println("Sending " + morseString + "(" + input[:len(input)-1] + ")" + strconv.Itoa(i) + "Bytes written")
if err != nil {
fmt.Println(err)
break
}
}
}
func brutalReader() {
file, err := os.OpenFile("./out.log", os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0660)
if err != nil {
fmt.Println(err)
return
}
defer func() { _ = file.Close() }()
ch := make(chan string, 500)
// for i := 0; i < 20; i++ {
go getLine(ch)
// }
counter := 0
for data, moredata := <-ch; moredata && counter < *brutal; data, moredata = <-ch {
fmt.Println(morseToAlph(data))
fmt.Fprintln(file, morseToAlph(data))
err := file.Sync()
if err != nil {
fmt.Println(err)
return
}
counter++
}
}
func getLine(out chan string) {
for {
conn, err := net.Dial("tcp", "morset.pwning.xxx:11821")
if err != nil {
fmt.Println(err)
close(out)
return
}
remoteReader := bufio.NewReader(conn)
line, err := remoteReader.ReadString('\n')
if err != nil {
fmt.Println(err)
close(out)
return
}
out <- line[:len(line)-1]
_ = conn.Close()
}
}
func morseToAlph(in string) (out string) {
letters := strings.Split(in, " ")
for _, letter := range letters {
if morse[letter] != "" {
out += morse[letter]
} else {
if strings.ContainsAny(letter, "-.") {
fmt.Println("Not recognized: " + letter)
}
}
}
if *uppercase {
out = strings.ToUpper(out)
}
return
}
func alphToMorse(in string) (out string) {
for _, char := range in {
if stone[string(char)] != "" {
out += stone[string(char)] + " "
} else {
fmt.Println("Not recognized: " + string(char))
}
}
return
}
func prompt() {
fmt.Print("morse interpreter>")
}
//var NavyStone = map[string]string{"a": "--", "b": "-..-", "c": ".-.", "d": "---", "e": ".-", "f": "---.", "g": "--..", "h": ".--", "i": ".", "j": ".---", "k": "-.-.", "l": "--.", "m": ".--.", "n": "..", "o": "-.", "p": ".-.-", "q": ".-..", "r": "-..", "s": "-.-", "t": "-", "u": "..-", "v": ".---", "w": "..-.", "x": "-..-", "y": "...", "z": "----", "0": "-..-", "1": "....", "2": "--.-", "3": "...-", "4": "---.", "5": "..--", "6": "--..", "7": ".---", "8": "-...", "9": ".--."}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment