diff --git a/global.go b/global.go index de1b4d8..6ccab96 100644 --- a/global.go +++ b/global.go @@ -3,6 +3,7 @@ package main import ( "context" "io" + "os" "time" "github.com/hymkor/gmnlisp" @@ -138,3 +139,15 @@ func (g *Global) expectX(ctx context.Context, w *gmnlisp.World, node gmnlisp.Nod return gmnlisp.Progn(ctx, w, timeoutAct) } } + +func (g *Global) getenv(ctx context.Context, w *gmnlisp.World, arg gmnlisp.Node) (gmnlisp.Node, error) { + name, err := gmnlisp.ExpectClass[gmnlisp.String](ctx, w, arg) + if err != nil { + return nil, err + } + value, ok := os.LookupEnv(string(name)) + if !ok { + return gmnlisp.Null, nil + } + return gmnlisp.String(value), nil +} diff --git a/main.go b/main.go index d406fa5..94cd66c 100644 --- a/main.go +++ b/main.go @@ -33,6 +33,7 @@ func mains(args []string) error { gmnlisp.NewSymbol("spawn"): &gmnlisp.Function{Min: 1, F: g.spawn}, gmnlisp.NewSymbol("expect*"): gmnlisp.SpecialF(g.expectX), gmnlisp.NewSymbol("expect"): gmnlisp.SpecialF(g.expect), + gmnlisp.NewSymbol("getenv"): gmnlisp.Function1(g.getenv), }) if len(args) <= 0 {