github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/io/echo.go (about) 1 package io 2 3 import ( 4 "errors" 5 "strings" 6 7 "github.com/lmorg/murex/lang" 8 "github.com/lmorg/murex/lang/types" 9 "github.com/lmorg/murex/utils/ansi" 10 ) 11 12 func init() { 13 lang.DefineFunction("out", cmdOut, types.String) 14 lang.DefineFunction("(", cmdOutNoCR, types.String) 15 lang.DefineFunction("tout", cmdTout, types.Any) 16 lang.DefineFunction("err", cmdErr, types.Null) 17 } 18 19 func cmdOut(p *lang.Process) (err error) { 20 p.Stdout.SetDataType(types.String) 21 22 s := p.Parameters.StringAll() 23 s = ansi.ExpandConsts(s) 24 25 _, err = p.Stdout.Writeln([]byte(s)) 26 return 27 } 28 29 func cmdOutNoCR(p *lang.Process) error { 30 s := p.Parameters.StringAll() 31 32 if len(s) == 0 || !strings.HasSuffix(s, ")") { 33 return errors.New("missing closing ')'") 34 } 35 36 p.Stdout.SetDataType(types.String) 37 38 s = ansi.ExpandConsts(s[:len(s)-1]) 39 40 _, err := p.Stdout.Write([]byte(s)) 41 return err 42 } 43 44 func cmdTout(p *lang.Process) error { 45 dt, err := p.Parameters.String(0) 46 if err != nil { 47 return err 48 } 49 50 s := p.Parameters.StringAllRange(1, -1) 51 s = ansi.ExpandConsts(s) 52 53 p.Stdout.SetDataType(dt) 54 55 _, err = p.Stdout.Write([]byte(s)) 56 return err 57 } 58 59 func cmdErr(p *lang.Process) error { 60 p.Stdout.SetDataType(types.Null) 61 p.ExitNum = 1 62 63 s := p.Parameters.StringAll() 64 s = ansi.ExpandConsts(s) 65 66 _, err := p.Stderr.Writeln([]byte(s)) 67 return err 68 } 69 70 /* 71 func cmdTimeStamp(pid string) (err error) { 72 //out.StdOut = 73 //return 74 } 75 */