package main import ( "bytes" "errors" "io" "log" "os" "hakurei.app/command" ) func main() { log.SetFlags(0) log.SetPrefix("irdump: ") var ( flagOutput string flagReal bool ) c := command.New(os.Stderr, log.Printf, "irdump", func(args []string) (err error) { var input *os.File if len(args) < 1 { return errors.New("irdump requires 1 argument") } if input, err = os.Open(args[0]); err != nil { return } defer input.Close() var output *os.File if flagOutput == "" { output = os.Stdout } else { defer output.Close() if output, err = os.Create(flagOutput); err != nil { return } } inputData := bytes.NewBuffer(nil) if _, err = io.Copy(inputData, input); err != nil { return } var out string if out, err = Disassemble(inputData.Bytes(), flagReal); err != nil { return } if _, err = output.WriteString(out); err != nil { return } return }).Flag( &flagOutput, "o", command.StringFlag(""), "Output file for asm (leave empty for stdout)", ).Flag( &flagReal, "r", command.BoolFlag(false), "skip label generation; idents print real value") c.MustParse(os.Args[1:], func(err error) { log.Fatal(err) }) } func Disassemble(ir []byte, real bool) (string, error) { return "hello world", nil }