annotate src/entai_app/entai_app.go @ 3:ca866a38a6a0

Implement intaractive-mode & setting from config-file.
author pyon@macmini
date Sun, 16 Oct 2016 09:54:33 +0900
parents 451c99c1d9de
children e4066309b04f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
1 /****************************************************************************/
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
2 /* Entai_app.go */
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
3 /* Last Change: 2016-10-15 Sat 19:29:24. */
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
4 /* By T.Mutoh */
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
5 /****************************************************************************/
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
6
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
7 package main
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
8
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
9 import (
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
10 "bufio"
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
11 "encoding/csv"
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
12 "flag"
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
13 "fmt"
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
14 "io"
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
15 "log"
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
16 "os"
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
17 "strconv"
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
18 "strings"
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
19 "time"
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
20
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
21 "entai"
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
22 )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
23
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
24 var ver = "0.4"
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
25 var e entai.Entai
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
26
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
27 func main() {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
28
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
29 // arguments
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
30 h := flag.Bool( "h", false, "help" )
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
31 c := flag.String( "c", "", "config csv file" )
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
32 r := flag.Bool( "r", false, "print rate" )
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
33 b := flag.Bool( "b", false, "batch mode" )
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
34 l := flag.Bool( "l", false, "1-liner mode" )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
35 v := flag.Bool( "v", false, "print verbose in 1-liner mode")
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
36 i := flag.Bool( "i", false, "print input value in 1-liner mode")
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
37 d := flag.Bool( "d", false, "intaracitve mode")
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
38 s := flag.Bool( "s", false, "server mode" )
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
39 p := flag.Int( "p", 8080, "listen port in server mode" )
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
40
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
41 flag.Parse()
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
42
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
43 if flag.NFlag() == 0 {
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
44 printTile()
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
45 flag.PrintDefaults()
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
46 fmt.Fprint( os.Stderr, "\n" )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
47 os.Exit( 1 )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
48 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
49
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
50 // Setting rates
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
51 if *c == "" {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
52 e.DefaultRates()
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
53 } else {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
54 f, err := os.Open( *c ); if err != nil {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
55 fmt.Fprintf( os.Stderr, "cannot open config-file : %v\n", err )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
56 os.Exit( 1 )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
57 }
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
58
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
59 r := csv.NewReader( f )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
60 r.Comment = '#'
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
61 r.TrimLeadingSpace = true
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
62 for {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
63 record, err := r.Read()
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
64 if err == io.EOF {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
65 break
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
66 } else if err != nil {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
67 log.Fatal( err )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
68 }
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
69 e.AddRates( record[1], record[2], record[3] )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
70 }
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
71 f.Close()
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
72
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
73 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
74
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
75 switch {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
76
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
77 // Show examples
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
78 case *h :
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
79 printTile()
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
80 fmt.Fprint( os.Stderr, "1-liner mode:\n" )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
81 fmt.Fprint( os.Stderr, "> entai_app -l 30000 20160731 20161224\n\n" )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
82 fmt.Fprint( os.Stderr, "> entai_app -i -l 29000 20160731 20161224\n\n" )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
83 fmt.Fprint( os.Stderr, "> entai_app -i -v -l 15000 20160731 20161224\n\n" )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
84 fmt.Fprint( os.Stderr, "> entai_app -c conf/entai.conf -l 15000 20160731 20161224\n\n" )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
85 fmt.Fprint( os.Stderr, "batch mode:\n" )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
86 fmt.Fprint( os.Stderr, "> entai_app -b 1.csv 2.csv ...\n\n" )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
87 fmt.Fprint( os.Stderr, "server mode:\n" )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
88 fmt.Fprint( os.Stderr, "> entai_app -s -p 3000\n" )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
89 os.Exit( 1 )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
90
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
91 // Show rates
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
92 case *r :
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
93 printTile()
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
94 fmt.Fprint( os.Stderr, e.GetRates() )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
95 os.Exit( 0 )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
96
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
97 // Server-mode ( not implement )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
98 case *s :
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
99 *p = 8080
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
100 fmt.Fprint( os.Stderr, "server mode is not implemented.\n" )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
101 os.Exit( 1 )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
102
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
103 // Intaractive-mode
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
104 case *d :
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
105 printTile()
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
106 fmt.Print( e.GetRates() )
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
107 fmt.Print( "-----------\n\n" )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
108
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
109 var t, d, p string
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
110 for {
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
111 t = getFromTerminal( "Input Tax ", t )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
112 d = getFromTerminal( "Input Due ", d )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
113 p = getFromTerminal( "Input Paid", p )
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
114
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
115 result, detail, err := processEntai( t, d, p )
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
116 if err != nil {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
117 fmt.Printf( "%v\n", err )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
118 }
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
119 fmt.Printf( " = %d", result )
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
120
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
121 fmt.Print( "\t\t\t... Continue [Enter] / Detail [1] / Quit [9] ? " )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
122 input := bufio.NewScanner( os.Stdin )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
123 input.Scan()
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
124 switch input.Text() {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
125 case "1" :
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
126 fmt.Printf( " = %s\n\n", detail )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
127 case "9" :
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
128 os.Exit( 0 )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
129 default :
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
130 }
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
131 }
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
132
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
133 // 1-Liner-mode
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
134 case *l :
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
135 if *i {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
136 fmt.Printf( "%s,%s,%s,", flag.Arg(0), flag.Arg(1), flag.Arg(2) )
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
137 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
138
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
139 result, detail, err := processEntai( flag.Arg(0), flag.Arg(1), flag.Arg(2) )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
140 if err != nil {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
141 fmt.Fprintf( os.Stderr, "%s : %v\n", detail, err )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
142 os.Exit( 1 )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
143 }
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
144 fmt.Print( result )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
145
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
146 if *v {
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
147 fmt.Print( ",", detail )
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
148 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
149 fmt.Print( "\n" )
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
150
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
151 os.Exit( 0 )
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
152
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
153 // Batch-mode
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
154 case *b :
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
155 files := flag.Args()
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
156
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
157 if len( files ) == 0 {
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
158 fmt.Fprint( os.Stderr, "no input file.\n" )
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
159 os.Exit( 1 )
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
160 } else {
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
161
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
162 for _, file := range files {
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
163 f, err := os.Open( file ); if err != nil {
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
164 fmt.Fprintf( os.Stderr, "cannot open file.[%v]\n", err )
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
165 os.Exit( 1 )
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
166 }
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
167
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
168 input := bufio.NewScanner( f )
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
169 b := bufio.NewWriter( os.Stdout )
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
170 for input.Scan() {
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
171 s := strings.Split( input.Text(), "," )
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
172 if strings.HasPrefix( input.Text(), "#" ) {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
173 if strings.Contains( input.Text(), "@@" ) {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
174 buf := strings.Replace( input.Text(), "#", "", 1 )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
175 buf = strings.Replace( buf, "@@", "", 1 )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
176 fmt.Fprintf( b, "%s\n", buf )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
177 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
178 continue
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
179 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
180 result, detail, err := processEntai( s[0], s[1], s[2] )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
181 if err != nil {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
182 fmt.Fprintf( os.Stderr, "%s : %v\n", detail, err )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
183 os.Exit( 1 )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
184 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
185 fmt.Fprintf( b, "%s,%s,%s,%d,%s\n", s[0], s[1], s[2], result, detail )
1
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
186 }
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
187 b.Flush()
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
188 f.Close()
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
189 }
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
190 os.Exit( 0 )
3dafd57af3b1 bug-fix.
pyon@macmini
parents: 0
diff changeset
191 }
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
192 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
193 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
194
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
195 // Subroutines
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
196 func processEntai( tax, due, paid string ) ( int, string, error ) {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
197 t, msg, err := validInt( tax ); if err != nil {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
198 return -1, msg, err
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
199 }
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
200
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
201 d, msg, err := validDate( due ); if err != nil {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
202 return -1, msg, err
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
203 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
204 p, msg, err := validDate( paid ); if err != nil {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
205 return -1, msg, err
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
206 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
207
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
208 e.Set( d, p, t )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
209 result, detail := e.Result()
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
210
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
211 return result, detail, nil
0
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
212 }
de451fa0c9cd golang repository.
pyon@macmini
parents:
diff changeset
213
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
214 func validDate( s string ) ( time.Time, string, error ) {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
215 layout := "20060102"
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
216 t, err := time.Parse( layout, s ); if err != nil {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
217 return t, "bad date format.", err
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
218 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
219 return t, "", nil
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
220 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
221
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
222 func validInt( s string ) ( int, string, error ) {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
223 i, err := strconv.Atoi( s )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
224 if err != nil || i < 0 {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
225 return -1, "bad money format.", err
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
226 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
227 return i, "", nil
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
228 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
229
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
230 func getFromTerminal( prompt, last string ) ( string ) {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
231 fmt.Printf( "%s > ", prompt )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
232 input := bufio.NewScanner( os.Stdin )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
233 input.Scan()
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
234 s := input.Text()
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
235 if s == "." {
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
236 s = last
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
237 fmt.Printf( "%s > %s\n", prompt, s )
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
238 }
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
239 return s
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
240 }
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
241
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
242 func printTile() {
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
243 fmt.Fprint( os.Stderr, "\n==================================================\n" )
3
ca866a38a6a0 Implement intaractive-mode & setting from config-file.
pyon@macmini
parents: 2
diff changeset
244 fmt.Fprintf( os.Stderr, " Entai_app ver %s ( 2016.10.19 ) - since 2016\n", ver )
2
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
245 fmt.Fprint( os.Stderr, "==================================================\n\n" )
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
246 }
451c99c1d9de implement intaractive mode.
pyon@macmini
parents: 1
diff changeset
247