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  */