| @ -0,0 +1,81 @@ | |||||
| package main | |||||
| import ( | |||||
| "encoding/hex" | |||||
| "flag" | |||||
| "fmt" | |||||
| "os" | |||||
| "strings" | |||||
| "git.trashheap.io/blinkthethings/modhex" | |||||
| ) | |||||
| func main() { | |||||
| // configure command line flags | |||||
| var decode, hexdata bool | |||||
| flag.BoolVar(&decode, "d", false, "decode data (the default is to encode).") | |||||
| flag.BoolVar(&hexdata, "x", false, "Use hex encoding for non-modhex data.") | |||||
| flag.Usage = func() { | |||||
| fmt.Println("modhex - encode/decode data using modhex encoding.") | |||||
| fmt.Println() | |||||
| fmt.Println("Usage:\n\n modex [-d] [-x] <data>") | |||||
| fmt.Println() | |||||
| fmt.Println(" Convert input DATA as specified and print output to STDOUT.") | |||||
| fmt.Println() | |||||
| fmt.Printf("Flags:\n\n") | |||||
| flag.PrintDefaults() | |||||
| fmt.Println() | |||||
| } | |||||
| flag.Parse() | |||||
| if decode { | |||||
| // decode was selected | |||||
| // read the modhex string from the command line | |||||
| src := []byte(strings.Join(flag.Args(), " ")) | |||||
| // create a buffer to hold the decoded data | |||||
| dst := make([]byte, modhex.DecodedLen(len(src))) | |||||
| // decode the input | |||||
| _, err := modhex.Decode(dst, src) | |||||
| if err != nil { | |||||
| // report the error to the user | |||||
| fmt.Fprintln(os.Stderr, err) | |||||
| os.Exit(-1) | |||||
| } | |||||
| // should the output be a hex string? | |||||
| if hexdata { | |||||
| // print out the decoded data as a hex string | |||||
| fmt.Println(hex.EncodeToString(src)) | |||||
| } else { | |||||
| // print out the decoded bytes stdout | |||||
| os.Stdout.Write(dst) | |||||
| } | |||||
| } else { | |||||
| // encode was selected | |||||
| // read the input data | |||||
| var src []byte | |||||
| if hexdata { | |||||
| // read the input as a hex string | |||||
| var err error | |||||
| src, err = hex.DecodeString(flag.Arg(0)) | |||||
| if err != nil { | |||||
| // report the hex decode error and exit | |||||
| fmt.Fprintf(os.Stderr, "modhex: %s\n", err) | |||||
| os.Exit(-1) | |||||
| } | |||||
| } else { | |||||
| // read the input as bytes | |||||
| src = []byte(strings.Join(flag.Args(), "")) | |||||
| } | |||||
| // encode the input | |||||
| s := modhex.EncodeToString(src) | |||||
| // print out the modhex encoded string | |||||
| fmt.Println(s) | |||||
| } | |||||
| } | |||||