// Package main is the main program for bulletin. // It is based off the 1989 version of bulletin. package main import ( "context" "fmt" "os" "git.lyda.ie/kevin/bulletin/batch" "git.lyda.ie/kevin/bulletin/repl" "git.lyda.ie/kevin/bulletin/this" "github.com/urfave/cli/v3" ) func main() { cmd := &cli.Command{ Name: "bulletin", Usage: "a bulletin system", Description: "An interpretation of the VMS BULLETIN program.", Flags: []cli.Flag{ &cli.StringFlag{ Name: "user", Aliases: []string{"u"}, Usage: "user to run bulletin as", Required: true, }, &cli.StringFlag{ Name: "name", Aliases: []string{"n"}, Usage: "TODO: name for development", }, &cli.StringFlag{ Name: "batch", Aliases: []string{"b"}, Usage: "batch command", }, }, Action: func(_ context.Context, cmd *cli.Command) error { user := cmd.String("user") batchFlag := cmd.String("batch") if batchFlag != "" { if user != "SYSTEM" { fmt.Println("ERROR: can only run batch commands as SYSTEM.") os.Exit(1) } err := this.StartThis(user, cmd.String("name")) if err != nil { fmt.Printf("ERROR: %s.", err) os.Exit(1) } exitcode := 0 switch batchFlag { case "reboot": exitcode = batch.Reboot() case "expire": exitcode = batch.Expire() case "install": exitcode = batch.Install() default: fmt.Println("ERROR: can only run batch commands as SYSTEM.") exitcode = 1 } os.Exit(exitcode) } err := this.StartThis(user, cmd.String("name")) if err != nil { return err } err = repl.Loop() if err != nil { return err } return nil }, } err := cmd.Run(context.Background(), os.Args) if err != nil { fmt.Printf("ERROR: %s.\n", err) } }