From 5539fb85adc904102b1dd798783230f399ae63b3 Mon Sep 17 00:00:00 2001 From: HAYAMA_Kaoru Date: Fri, 29 Nov 2024 23:47:40 +0900 Subject: [PATCH] Read script from argv[1] --- example.lsp | 13 +++++++++++++ main.go | 33 ++++++++++++++++++--------------- 2 files changed, 31 insertions(+), 15 deletions(-) create mode 100644 example.lsp diff --git a/example.lsp b/example.lsp new file mode 100644 index 0000000..77dbff6 --- /dev/null +++ b/example.lsp @@ -0,0 +1,13 @@ +(spawn "cmd.exe") +(let ((ctrlc (format nil "~A" (convert 3 )))) + (block main + (while t + (case (expect* "xxx" "yyy") + ((0) + (sendln (string-append ctrlc "exit")) + (return-from main nil) + ) + ((1) + (sendln (string-append ctrlc "rem")) + ) + )))) diff --git a/main.go b/main.go index c2bf102..a79e3ff 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,7 @@ package main import ( "context" + "errors" "fmt" "io" "os" @@ -52,7 +53,7 @@ func (g *Global) expect(ctx context.Context, w *gmnlisp.World, args []gmnlisp.No return gmnlisp.Integer(result), nil } -func mains() error { +func mains(args []string) error { term, err := NewTerm() if err != nil { return err @@ -76,24 +77,26 @@ func mains() error { gmnlisp.NewSymbol("expect*"): &gmnlisp.Function{Min: 1, F: g.expect}, }) - _, err = lisp.Interpret(context.Background(), ` - (spawn "cmd.exe") - (block main - (while t - (case (expect* "xxx" "yyy") - ((0) - (sendln (format nil "~Aexit" (convert 3 ))) - (return-from main nil) - ) - ((1) - (sendln (format nil "~Arem" (convert 3 ))) - ) - )))`) + if len(args) <= 0 { + return errors.New("script path required") + } + script, err := os.ReadFile(args[0]) + if err != nil { + return err + } + + posixArgv := []gmnlisp.Node{} + for _, s := range args { + posixArgv = append(posixArgv, gmnlisp.String(s)) + } + lisp = lisp.Let(&gmnlisp.Pair{Key: gmnlisp.NewSymbol("args"), Value: gmnlisp.List(posixArgv...)}) + + _, err = lisp.Interpret(context.Background(), string(script)) return err } func main() { - if err := mains(); err != nil { + if err := mains(os.Args[1:]); err != nil { fmt.Fprintln(os.Stderr, err.Error()) os.Exit(1) }