Mercurial > mercurial > hgweb_kaigo.hg.cgi
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 |