From 4cbd7844ced1d1da19f7470e556a3fbf426e9ca1 Mon Sep 17 00:00:00 2001 From: Eric Anderson Date: Thu, 3 Jul 2014 19:34:38 -0700 Subject: Add flags and improve usage message --- capset.go | 65 ++++++++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 22 deletions(-) diff --git a/capset.go b/capset.go index 421f7f1..c0b9bbe 100644 --- a/capset.go +++ b/capset.go @@ -312,53 +312,74 @@ func (cs *Capset) GetTableau() []Card { return cs.tableau } -func loadFromSave(d *Deck) *Capset { - savefile, err := os.Open("./capset.out") +func loadFromSave(d *Deck, saveFile string, initialMaxim int) (*Capset, error) { + savefile, err := os.Open(saveFile) if err != nil { - return nil + return nil, err } defer savefile.Close() scanner := bufio.NewScanner(savefile) for scanner.Scan() { } - cs := NewCapset(d, -1) - _, err = fmt.Sscanln(scanner.Text(), cs) - if err != nil { - return nil + if err := scanner.Err(); err != nil { + return nil, err + } + cs := NewCapset(d, initialMaxim) + if _, err := fmt.Sscanln(scanner.Text(), cs); err != nil { + return nil, err } - return cs + fmt.Print("Loaded save file\n") + return cs, nil } func main() { + flag.Usage = func() { + fmt.Fprintf(os.Stderr, "Usage: %s [OPTIONS] DIMENSIONS\n", os.Args[0]) + fmt.Fprintf(os.Stderr, "Calculate cards that do not contain a set.\n\n") + flag.PrintDefaults() + } + initialMaxim := flag.Int("maxim", -1, "initial maxim to use; -1 for auto") + saveFile := flag.String("save-file", "", "file to save progress to") + flag.Parse() args := flag.Args() if len(args) != 1 { - fmt.Println("Usage: capset dim\n\tdim int := number of dimensions/attributes") - log.Fatal("Improper Usage") + flag.Usage() + os.Exit(1) } dim, err := strconv.Atoi(args[0]) if err != nil { log.Fatal(err) } d := NewDeck(dim) - cs := loadFromSave(d) + var cs *Capset + var outfile *os.File + if *saveFile != "" { + var err error + cs, err = loadFromSave(d, *saveFile, *initialMaxim) + if err != nil && !os.IsNotExist(err) { + log.Fatal(err) + } + + outfile, err = os.OpenFile(*saveFile, + os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644) + if err != nil { + log.Fatal(err) + } + defer outfile.Close() + } if cs == nil { - cs = NewCapset(d, -1) + cs = NewCapset(d, *initialMaxim) } fmt.Println("Starting processing with", cs.tableau) - outfile, err := os.OpenFile("./capset.out", - os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644) - if err != nil { - log.Fatal(err) - } - defer outfile.Close() - for cs.FindNextCapset() { fmt.Println(cs.GetTableau()) - _, err = fmt.Fprintln(outfile, cs.GetTableau()) - if err != nil { - log.Println(err) + if outfile != nil { + _, err = fmt.Fprintln(outfile, cs.GetTableau()) + if err != nil { + log.Println(err) + } } } } -- cgit v1.2.3-54-g00ecf