| 
					
				 | 
			
			
				@@ -0,0 +1,101 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+package main 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"bufio" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"flag" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"fmt" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"log" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"os" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"strings" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func hexout(text string) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for _, b := range []byte(text) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		fmt.Printf("%02x ", b) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	fmt.Println("") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func repr_line(line string) string { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	output := "" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for _, ch := range []byte(line) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		switch { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		case ch == '\'': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			output += "\\'" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		case ch == '"': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			output += "\\\"" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		case ch == '\\': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			output += "\\\\" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		case ch < byte(0x20) || ch > byte(0x7e): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			output += fmt.Sprintf("\\x%02x", ch) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			output += string(ch) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return output 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func readfile(filename string) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	var basename string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	var lines []string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	idx := strings.LastIndex(filename, "/") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	basename = filename[idx+1:] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	idx = strings.Index(basename, ".") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	basename = basename[:idx] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	file, err := os.Open(filename) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		log.Panicf("Open(%s): %s\n", filename, err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	defer file.Close() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// Read the lines 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	scanner := bufio.NewScanner(file) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for scanner.Scan() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		line := scanner.Text() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		lines = append(lines, line) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// Ok, is what we have usable, or did it mangle up our Latin1 text? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// hexout(lines[0]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	fmt.Printf("func ANSI%s() [%d]string {\n", strings.Title(basename), len(lines)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// insert CP437_to_Unicode in here, if needed. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	fmt.Printf("  data := [%d]string {\n", len(lines)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for _, line := range lines { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		fmt.Printf("    \"%s\",\n", repr_line(line)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	fmt.Println("  }") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	fmt.Println("  if door.Unicode {") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	fmt.Println("    for idx := range lines {") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	fmt.Println("      data[idx] = door.CP437_to_Unicode(data[idx])") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	fmt.Println("    }") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	fmt.Println("  }") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	fmt.Println("  return data") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	fmt.Printf("}\n\n") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func main() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	var defaultPackage string = "main" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	flag.StringVar(&defaultPackage, "p", "main", "Package name to use") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	flag.Parse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if flag.NArg() == 0 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		fmt.Println("ANSI (CP437) to go converter.") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		fmt.Println("No ANSI filenames given.") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		flag.PrintDefaults() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		os.Exit(2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	fmt.Printf("package %s\n\n", defaultPackage) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	fmt.Printf("import (\n  \"red-green/door\"\n  )\n\n") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for _, filename := range flag.Args() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		readfile(filename) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |