diff options
Diffstat (limited to 'config.go')
-rw-r--r-- | config.go | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/config.go b/config.go new file mode 100644 index 0000000..729815f --- /dev/null +++ b/config.go @@ -0,0 +1,83 @@ +package main + + +import ( + "fmt" + "os" + "bufio" + "regexp" + "strings" + "log" +) + + +type Config struct { + host string + port string + paste_dir string + templ_dir string + log_fname string + logger *log.Logger +} + + +func (c Config) String() string { + + var s string + + s+= "Host: " + c.host + "\n" + s+= "Port: " + c.port + "\n" + s+= "paste_dir: " + c.paste_dir + "\n" + s+= "templ_dir: " + c.templ_dir + "\n" + + return s + +} + +func parse_config (fname string, c *Config) error { + + + f, err := os.Open(fname); + if err != nil { + return err + } + + r := bufio.NewScanner(f) + + line := 0 + for r.Scan (){ + s := r.Text() + line += 1 + if matched, _ := regexp.MatchString("^([ \t]*)$", s); matched != true { + // it's not a blank line + if matched, _ := regexp.MatchString("^#", s); matched != true { + // This is not a comment... + if matched, _ := regexp.MatchString("^([a-z_]+)=.*", s); matched == true { + // and contains an assignment + fields := strings.Split(s, "=") + switch fields[0]{ + case "host": + c.host = fields[1] + case "port": + c.port = fields[1] + case "paste_dir": + c.paste_dir = fields[1] + case "templ_dir": + c.templ_dir = fields[1] + case "log_fname": + c.log_fname = fields[1] + default: + fmt.Fprintf(os.Stderr, "Error reading config file %s at line %d: unknown variable '%s'\n", + fname, line, fields[0]) + } + } else { + fmt.Fprintf(os.Stderr, "Error reading config file %s at line %d: unknown statement '%s'\n", + fname, line, s) + } + } + } + } + return nil +} + + |