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 }