func wrapper_setDownloadPath(t *eval.Thread, in []eval.Value, out []eval.Value) {
	path := in[0].(eval.StringValue).Get(t)
	spectrum.SetDownloadPath(path)
}
Signature: func setDownloadPath(path string)
package interpreter
import (
	"bytes"
	"fmt"
	"github.com/remogatto/gospeccy/src/formats"
	"github.com/remogatto/gospeccy/src/spectrum"
	"github.com/sbinet/go-eval"
	"io/ioutil"
	"net/url"
	"strings"
	"time"
)
var definedFunctions = make(map[string]byte)
func defineFunction(name string, t *eval.FuncType, f eval.FuncValue) {
	w.DefineVar(name, t, f)
	definedFunctions[name] = 0
}
type Function struct {
	Name       string          
	Type       *eval.FuncType  
	Value      eval.FuncValue  
	Help_key   string          
	Help_value string
}
var functionsToAdd []Function
func DefineFunction(f Function) {
	mutex.Lock()
	defer mutex.Unlock()
	if w == nil {
		functionsToAdd = append(functionsToAdd, f)
	} else {
		defineFunction(f.Name, f.Type, f.Value)
		if (f.Help_key != "") && (f.Help_value != "") {
			help_keys = append(help_keys, f.Help_key)
			help_vals = append(help_vals, f.Help_value)
		}
	}
}
var help_keys []string
var help_vals []string
func wrapper_help(t *eval.Thread, in []eval.Value, out []eval.Value) {
	fmt.Fprintf(stdout, "\nAvailable commands:\n")
	maxKeyLen := 1
	for i := 0; i < len(help_keys); i++ {
		if len(help_keys[i]) > maxKeyLen {
			maxKeyLen = len(help_keys[i])
		}
	}
	for i := 0; i < len(help_keys); i++ {
		fmt.Fprintf(stdout, "  %s", help_keys[i])
		for j := len(help_keys[i]); j < maxKeyLen; j++ {
			fmt.Fprintf(stdout, " ")
		}
		fmt.Fprintf(stdout, "  %s\n", help_vals[i])
	}
}
func wrapper_exit(t *eval.Thread, in []eval.Value, out []eval.Value) {
	if app.TerminationInProgress() || app.Terminated() {
		return
	}
	app.RequestExit()
}
func wrapper_vars(t *eval.Thread, in []eval.Value, out []eval.Value) {
	vars := make([]eval.Value, 0, len(intp.vars))
	for varName, _ := range intp.vars {
		s := string_value_t(varName)
		vars = append(vars, &s)
	}
	var slice eval.Slice
	base := array_value_t(vars)
	slice.Base = &base
	slice.Len = int64(len(vars))
	slice.Cap = int64(len(vars))
	out[0].(eval.SliceValue).Set(t, slice)
}
func wrapper_definedFunction(t *eval.Thread, in []eval.Value, out []eval.Value) {
	name := in[0].(eval.StringValue).Get(t)
	_, defined := definedFunctions[name]
	out[0].(eval.BoolValue).Set(t, defined)
}
func wrapper_reset(t *eval.Thread, in []eval.Value, out []eval.Value) {
	if app.TerminationInProgress() || app.Terminated() {
		return
	}
	romLoaded := make(chan (<-chan bool))
	speccy.CommandChannel <- spectrum.Cmd_Reset{romLoaded}
	<-(<-romLoaded)
}
func wrapper_addSearchPath(t *eval.Thread, in []eval.Value, out []eval.Value) {
	path := in[0].(eval.StringValue).Get(t)
	spectrum.AddCustomSearchPath(path)
}