comparison superFC/fc_tmpl.go @ 5:519d6fd0bfd9 draft

searcher: bug fix. fcgo: new feature.
author pyon <pyon@macmini>
date Tue, 15 Jun 2021 18:32:28 +0900
parents ff7a3c254956
children
comparison
equal deleted inserted replaced
4:ff7a3c254956 5:519d6fd0bfd9
1 /* 1 /*
2 fcgo.go: Fucho de Go 2 fcgo.go: Fucho de Go
3 3
4 Last Change: 2021-06-14 月 16:14:04. 4 Last Change: 2021-06-15 Tue 18:30:10.
5 */ 5 */
6 package main 6 package main
7 7
8 /* 8 /*
9 #cgo LDFLAGS: -L. -lxdwapi -static 9 #cgo LDFLAGS: -L. -lxdwapi -static
10 ##### C_SOURCE ##### 10 ##### C_SOURCE #####
11 */ 11 */
12 import "C" 12 import "C"
13 13
14 import ( 14 import (
15 _ "embed"
16
15 "encoding/csv" 17 "encoding/csv"
16 "flag" 18 "flag"
17 "fmt" 19 "fmt"
18 "io" 20 "io"
19 "log" 21 "log"
20 "os" 22 "os"
21 "regexp" 23 "regexp"
24 "sort"
22 "strings" 25 "strings"
23 "time" 26 "time"
24 27
25 "golang.org/x/text/encoding/japanese" 28 "golang.org/x/text/encoding/japanese"
26 "golang.org/x/text/transform" 29 "golang.org/x/text/transform"
27 ) 30 )
28 31
32 //go:embed fcgo.go
33 var go_source string
34
29 type Data struct { 35 type Data struct {
30 Hno string 36 Hno string
31 Page string 37 Page string
32 } 38 }
33 39
35 s := []string{d.Hno, d.Page} 41 s := []string{d.Hno, d.Page}
36 return strings.Join(s, ",") 42 return strings.Join(s, ",")
37 } 43 }
38 44
39 var ( 45 var (
40 ver = "0.1" 46 ver = "0.2"
41 47
48 dump bool
49 pver bool
42 clean bool 50 clean bool
43 skip bool 51 skip bool
52 all bool
44 debug bool 53 debug bool
45 xdwfile string 54 xdwfile string
46 55
47 txtfile = "fctmp_txt.txt" 56 txtfile = "fctmp_txt.txt"
48 infofile = "fctmp_info.csv" 57 infofile = "fctmp_info.csv"
51 output = "output.xdw" 60 output = "output.xdw"
52 ) 61 )
53 62
54 func init() { 63 func init() {
55 /* INITIALIZE FLAGS */ 64 /* INITIALIZE FLAGS */
65 flag.BoolVar(&pver, "v", false, "print version")
66 flag.BoolVar(&dump, "s", false, "dump source")
67 flag.BoolVar(&all, "a", false, "output all page (default: matched page)")
56 flag.BoolVar(&clean, "c", false, "clean temporary files & exit") 68 flag.BoolVar(&clean, "c", false, "clean temporary files & exit")
57 flag.BoolVar(&skip, "e", false, "use existed files") 69 flag.BoolVar(&skip, "e", false, "use existed files")
58 flag.BoolVar(&debug, "d", false, "debug mode") 70 flag.BoolVar(&debug, "d", false, "debug mode")
59 flag.StringVar(&xdwfile, "i", "fc.xdw", "target xdw file") 71 flag.StringVar(&xdwfile, "i", "fc.xdw", "target xdw file")
60 } 72 }
61 73
62 func main() { 74 func main() {
63 flag.Parse() 75 flag.Parse()
76 if pver {
77 fmt.Printf("fcgo [ver %s]\n", ver)
78 os.Exit(0)
79 }
80 if dump {
81 fmt.Println(go_source)
82 os.Exit(0)
83 }
64 84
65 /* PRINT HEADER */ 85 /* PRINT HEADER */
66 fmt.Println("===================================================") 86 fmt.Println("===================================================")
67 fmt.Println(" 普徴のみならず納通なら被保番でソートできるかも... ") 87 fmt.Println(" 普徴のみならず納通なら被保番でソートできるかも... ")
68 fmt.Printf(" - fcgo [ver %s] -\n", ver) 88 fmt.Printf(" - fcgo [ver %s] -\n", ver)
111 } 131 }
112 print_time("read order done.") 132 print_time("read order done.")
113 debug_print(debug, fmt.Sprintf("len = %d / %d", len(h_order), n)) 133 debug_print(debug, fmt.Sprintf("len = %d / %d", len(h_order), n))
114 134
115 fmt.Println("[5] make_list ...") 135 fmt.Println("[5] make_list ...")
116 n, err = make_list(h_order, data_hash, pagefile) 136 n, err = make_list(h_order, data_hash, pagefile, all)
117 if err != nil { 137 if err != nil {
118 log.Fatal(err) 138 log.Fatal(err)
119 } 139 }
120 print_time("make list done.") 140 print_time("make list done.")
121 debug_print(debug, fmt.Sprintf("order = %d", n)) 141 debug_print(debug, fmt.Sprintf("order = %d", n))
223 n++ 243 n++
224 } 244 }
225 return order, n, nil 245 return order, n, nil
226 } 246 }
227 247
228 func make_list(h_order []string, hash map[string]Data, pagefile string) (int, error) { 248 func make_list(h_order []string, hash map[string]Data, pagefile string, all bool) (int, error) {
229 var n int 249 var n int
230 var list []string 250 var list []string
231 done := make(map[string]bool) 251 done := make(map[string]bool)
232 252
233 for _, h := range h_order { 253 for _, h := range h_order {
238 n++ 258 n++
239 } 259 }
240 } 260 }
241 } 261 }
242 262
263 if all {
264 var p []string
265 for h, data := range hash {
266 if !done[h] {
267 p = append(p, data.Page)
268 }
269 }
270 sort.Strings(p)
271 list = append(list, p...)
272 }
273
243 if err := write_pagefile(pagefile, list); err != nil { 274 if err := write_pagefile(pagefile, list); err != nil {
244 return n, err 275 return n, err
245 } 276 }
246 return n, nil 277 return n, nil
247 } 278 }
286 } 317 }
287 318
288 for _, file := range files { 319 for _, file := range files {
289 if strings.HasPrefix(file.Name(), prefix) { 320 if strings.HasPrefix(file.Name(), prefix) {
290 os.Remove(file.Name()) 321 os.Remove(file.Name())
291 continue
292 } 322 }
293 } 323 }
294 return err 324 return err
295 } 325 }
296 326