Initial cat that parses file names from the command line

This commit is contained in:
Fredric Silberberg 2014-09-24 22:24:46 -04:00
parent 72c638432f
commit 50c84a2f7d
2 changed files with 60 additions and 0 deletions

6
cat.go Normal file
View File

@ -0,0 +1,6 @@
package jsh
type CatOutput struct {
Output string
Files []string
}

54
cat/main.go Normal file
View File

@ -0,0 +1,54 @@
package main
import (
"flag"
"fmt"
"jsh"
"io/ioutil"
)
func catFiles(queue chan *jsh.JshFrame) {
// Get all of the non-flags. The rest were processed by the main function
fileNames := flag.Args()
for _,fileName := range fileNames {
file, err := ioutil.ReadFile(fileName)
var jshFrame jsh.JshFrame
if err != nil {
errText := make(map[string]string)
errText[fileName] = fmt.Sprintf("%s",err.Error())
jshFrame = jsh.JshFrame{"", errText}
queue <- &jshFrame
continue
}
output := jsh.CatOutput{}
output.Files = []string{fileName}
output.Output = string(file)
jshFrame = jsh.JshFrame{output, ""}
queue <- &jshFrame
}
}
func runJsonMode() {
queue := make(chan *jsh.JshFrame)
done := make(chan bool)
go jsh.OutputFrames(queue, done)
catFiles(queue)
close(queue)
<-done
}
func main() {
// TODO: Support more flags
jsonModePtr := flag.Bool("json", false, "whether to use json mode for input and output")
flag.Parse()
if !*jsonModePtr {
fmt.Printf("%s", jsh.FallbackWithArgs("/usr/bin/cat", flag.Args()))
} else {
runJsonMode()
}
}