Readline repl for linux & osx

This commit is contained in:
obscuren
2014-05-17 15:15:46 +02:00
parent 2ac292dc7a
commit 770808ce0d
7 changed files with 122 additions and 39 deletions

55
ethereum/repl_darwin.go Normal file
View File

@ -0,0 +1,55 @@
package main
// #cgo LDFLAGS: -lreadline
// #include <stdio.h>
// #include <stdlib.h>
// #include <readline/readline.h>
// #include <readline/history.h>
import "C"
import "unsafe"
func readLine(prompt *string) *string {
var p *C.char
//readline allows an empty prompt(NULL)
if prompt != nil {
p = C.CString(*prompt)
}
ret := C.readline(p)
if p != nil {
C.free(unsafe.Pointer(p))
}
if ret == nil {
return nil
} //EOF
s := C.GoString(ret)
C.free(unsafe.Pointer(ret))
return &s
}
func addHistory(s string) {
p := C.CString(s)
C.add_history(p)
C.free(unsafe.Pointer(p))
}
func (self *JSRepl) read() {
prompt := "eth >>> "
L:
for {
switch result := readLine(&prompt); true {
case result == nil:
break L //exit loop
case *result != "": //ignore blank lines
addHistory(*result) //allow user to recall this line
self.parseInput(*result)
}
}
}