github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/pipes/term/out.go (about)

     1  //go:build !js
     2  // +build !js
     3  
     4  package term
     5  
     6  import (
     7  	"os"
     8  
     9  	"github.com/lmorg/murex/lang/stdio"
    10  	"github.com/lmorg/murex/utils"
    11  )
    12  
    13  // Terminal: Standard Out
    14  
    15  // Out is the Stdout interface for term
    16  type Out struct {
    17  	term
    18  }
    19  
    20  func (t *Out) File() *os.File {
    21  	return os.Stdout
    22  }
    23  
    24  func OutSetDataTypeIPC() {
    25  	/*murexPid, exists := os.LookupEnv(consts.EnvMurexPid)
    26  
    27  	if !exists {
    28  		return
    29  	}
    30  
    31  	if strconv.Itoa(os.Getppid()) != murexPid {
    32  		return
    33  	}
    34  
    35  	outSetDataTypeFd3 = true*/
    36  }
    37  
    38  //var OutSetDataTypeIPC bool
    39  
    40  // SetDataType writes the data type to a special pipe when run under murex
    41  func (t *Out) SetDataType(dt string) {
    42  	/*if !OutSetDataTypeIPC || len(dt) == 0 || dt == types.Null {
    43  		return
    44  	}
    45  
    46  	f := os.NewFile(3, "dt")
    47  	_, err := f.WriteString(dt + "\n")
    48  	if err != nil && debug.Enabled {
    49  		tty.Stderr.WriteString("Error writing data type: " + err.Error() + "\n")
    50  	}
    51  
    52  	OutSetDataTypeIPC = false
    53  	f.Close()*/
    54  }
    55  
    56  // Write is the io.Writer() interface for term
    57  func (t *Out) Write(b []byte) (i int, err error) {
    58  	t.mutex.Lock()
    59  	t.bWritten += uint64(len(b))
    60  	t.mutex.Unlock()
    61  
    62  	i, err = os.Stdout.Write(b)
    63  	if err != nil {
    64  		os.Stderr.WriteString(err.Error())
    65  	}
    66  
    67  	return
    68  }
    69  
    70  // Writeln writes an OS-specific terminated line to the stdout
    71  func (t *Out) Writeln(b []byte) (int, error) {
    72  	return t.Write(appendBytes(b, utils.NewLineByte...))
    73  }
    74  
    75  // WriteArray performs data type specific buffered writes to an stdio.Io interface
    76  func (t *Out) WriteArray(dataType string) (stdio.ArrayWriter, error) {
    77  	return stdio.WriteArray(t, dataType)
    78  }