package cmd import ( "bufio" "fmt" "os" "time" "github.com/spf13/cobra" "git.jfdev.de/JonasFranzDEV/hal/hal" "git.jfdev.de/JonasFranzDEV/hal/parser" ) func Execute() { if err := rootCommand.Execute(); err != nil { fmt.Printf("%v\n", err) os.Exit(1) } } var rootCommand = &cobra.Command{ Args: cobra.ExactArgs(1), Use: "hal", RunE: runRootCommand, PreRun: func(cmd *cobra.Command, args []string) { startTime = time.Now() }, PostRun: func(cmd *cobra.Command, args []string) { totalTime := time.Since(startTime) fmt.Printf("Total execution time: %v", totalTime) }, } var debug bool var startTime time.Time func init() { rootCommand.Flags().BoolVarP(&debug, "debug", "d", false, "Enable debug mode") } func runRootCommand(cmd *cobra.Command, args []string) error { filename := args[0] if stats, err := os.Stat(filename); err != nil || stats.IsDir() { return err } file, err := os.Open(filename) if err != nil { return err } scanner := bufio.NewScanner(file) scanner.Split(bufio.ScanLines) var input []string for scanner.Scan() { input = append(input, scanner.Text()) } if err := file.Close(); err != nil { return err } program, err := parser.ParseProgram(input) if err != nil { return err } module, err := hal.NewHALModule(program, 256, 2, debug) if err != nil { return err } return module.Run() }