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 |
