| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- package main
-
- import (
- "bufio"
- "fmt"
- "os"
- )
-
- import "github.com/codecrafters-io/shell-starter-go/app/runnable"
- import "github.com/codecrafters-io/shell-starter-go/app/core"
-
- func getInput(ctx *core.Context) (string, error) {
- fmt.Print("$ ")
- input, err := bufio.NewReader(ctx.Stdin).ReadString('\n')
- if err != nil {
- return "", err
- }
- return input[:len(input)-1], nil
- }
-
- func repl(ctx *core.Context) {
- for {
- input, err := getInput(ctx)
- if err != nil {
- fmt.Fprintln(os.Stderr, "Error reading input: ", err)
- os.Exit(15)
- }
-
- runnable, err := runnable.Parse(ctx, input)
- // fmt.Printf("main():runnable=%#v\n", runnable)
- if err != nil {
- fmt.Fprintln(ctx.Stderr, err)
- continue
- }
-
- result := runnable.Run(ctx)
- switch result.Code {
- case core.ActionResultCodeExit:
- os.Exit(int(result.ExitStatus))
- case core.ActionResultCodeNoop:
- case core.ActionResultCodeBuiltinCommand:
- case core.ActionResultCodeExternalCommand:
- default:
- fmt.Fprintf(os.Stderr, "unknown action result code input: %d", result.Code)
- os.Exit(15)
- }
- }
- }
-
- func main() {
- ctx := core.Context{
- Stdout: os.Stdout,
- Stderr: os.Stderr,
- Stdin: os.Stdin,
- }
- repl(&ctx)
- }
|