func (pb *paramsBuffer) Start(s string) {
	pb.lk.Lock()
	pb.out.Reset()
	pb.buf.Reset()
	pb.buf.WriteString(s)
}
Start initializes the params buffer with the initial string data.
It also locks the paramsBuffer.  The caller must call End() when
finished.
package tcell
import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"os"
	"path"
	"strconv"
	"strings"
	"sync"
)
type Terminfo struct {
	Name         string   `json:"name"`
	Aliases      []string `json:"aliases,omitempty"`
	Columns      int      `json:"cols,omitempty"`    
	Lines        int      `json:"lines,omitempty"`   
	Colors       int      `json:"colors,omitempty"`  
	Bell         string   `json:"bell,omitempty"`    
	Clear        string   `json:"clear,omitempty"`   
	EnterCA      string   `json:"smcup,omitempty"`   
	ExitCA       string   `json:"rmcup,omitempty"`   
	ShowCursor   string   `json:"cnorm,omitempty"`   
	HideCursor   string   `json:"civis,omitempty"`   
	AttrOff      string   `json:"sgr0,omitempty"`    
	Underline    string   `json:"smul,omitempty"`    
	Bold         string   `json:"bold,omitempty"`    
	Blink        string   `json:"blink,omitempty"`   
	Reverse      string   `json:"rev,omitempty"`     
	Dim          string   `json:"dim,omitempty"`     
	EnterKeypad  string   `json:"smkx,omitempty"`    
	ExitKeypad   string   `json:"rmkx,omitempty"`    
	SetFg        string   `json:"setaf,omitempty"`   
	SetBg        string   `json:"setbg,omitempty"`   
	SetCursor    string   `json:"cup,omitempty"`     
	CursorBack1  string   `json:"cub1,omitempty"`    
	CursorUp1    string   `json:"cuu1,omitempty"`    
	PadChar      string   `json:"pad,omitempty"`     
	KeyBackspace string   `json:"kbs,omitempty"`     
	KeyF1        string   `json:"kf1,omitempty"`     
	KeyF2        string   `json:"kf2,omitempty"`     
	KeyF3        string   `json:"kf3,omitempty"`     
	KeyF4        string   `json:"kf4,omitempty"`     
	KeyF5        string   `json:"kf5,omitempty"`     
	KeyF6        string   `json:"kf6,omitempty"`     
	KeyF7        string   `json:"kf7,omitempty"`     
	KeyF8        string   `json:"kf8,omitempty"`     
	KeyF9        string   `json:"kf9,omitempty"`     
	KeyF10       string   `json:"kf10,omitempty"`    
	KeyF11       string   `json:"kf11,omitempty"`    
	KeyF12       string   `json:"kf12,omitempty"`    
	KeyF13       string   `json:"kf13,omitempty"`    
	KeyF14       string   `json:"kf14,omitempty"`    
	KeyF15       string   `json:"kf15,omitempty"`    
	KeyF16       string   `json:"kf16,omitempty"`    
	KeyF17       string   `json:"kf17,omitempty"`    
	KeyF18       string   `json:"kf18,omitempty"`    
	KeyF19       string   `json:"kf19,omitempty"`    
	KeyF20       string   `json:"kf20,omitempty"`    
	KeyF21       string   `json:"kf21,omitempty"`    
	KeyF22       string   `json:"kf22,omitempty"`    
	KeyF23       string   `json:"kf23,omitempty"`    
	KeyF24       string   `json:"kf24,omitempty"`    
	KeyF25       string   `json:"kf25,omitempty"`    
	KeyF26       string   `json:"kf26,omitempty"`    
	KeyF27       string   `json:"kf27,omitempty"`    
	KeyF28       string   `json:"kf28,omitempty"`    
	KeyF29       string   `json:"kf29,omitempty"`    
	KeyF30       string   `json:"kf30,omitempty"`    
	KeyF31       string   `json:"kf31,omitempty"`    
	KeyF32       string   `json:"kf32,omitempty"`    
	KeyF33       string   `json:"kf33,omitempty"`    
	KeyF34       string   `json:"kf34,omitempty"`    
	KeyF35       string   `json:"kf35,omitempty"`    
	KeyF36       string   `json:"kf36,omitempty"`    
	KeyF37       string   `json:"kf37,omitempty"`    
	KeyF38       string   `json:"kf38,omitempty"`    
	KeyF39       string   `json:"kf39,omitempty"`    
	KeyF40       string   `json:"kf40,omitempty"`    
	KeyF41       string   `json:"kf41,omitempty"`    
	KeyF42       string   `json:"kf42,omitempty"`    
	KeyF43       string   `json:"kf43,omitempty"`    
	KeyF44       string   `json:"kf44,omitempty"`    
	KeyF45       string   `json:"kf45,omitempty"`    
	KeyF46       string   `json:"kf46,omitempty"`    
	KeyF47       string   `json:"kf47,omitempty"`    
	KeyF48       string   `json:"kf48,omitempty"`    
	KeyF49       string   `json:"kf49,omitempty"`    
	KeyF50       string   `json:"kf50,omitempty"`    
	KeyF51       string   `json:"kf51,omitempty"`    
	KeyF52       string   `json:"kf52,omitempty"`    
	KeyF53       string   `json:"kf53,omitempty"`    
	KeyF54       string   `json:"kf54,omitempty"`    
	KeyF55       string   `json:"kf55,omitempty"`    
	KeyF56       string   `json:"kf56,omitempty"`    
	KeyF57       string   `json:"kf57,omitempty"`    
	KeyF58       string   `json:"kf58,omitempty"`    
	KeyF59       string   `json:"kf59,omitempty"`    
	KeyF60       string   `json:"kf60,omitempty"`    
	KeyF61       string   `json:"kf61,omitempty"`    
	KeyF62       string   `json:"kf62,omitempty"`    
	KeyF63       string   `json:"kf63,omitempty"`    
	KeyF64       string   `json:"kf64,omitempty"`    
	KeyInsert    string   `json:"kich,omitempty"`    
	KeyDelete    string   `json:"kdch,omitempty"`    
	KeyHome      string   `json:"khome,omitempty"`   
	KeyEnd       string   `json:"kend,omitempty"`    
	KeyHelp      string   `json:"khlp,omitempty"`    
	KeyPgUp      string   `json:"kpp,omitempty"`     
	KeyPgDn      string   `json:"knp,omitempty"`     
	KeyUp        string   `json:"kcuu1,omitempty"`   
	KeyDown      string   `json:"kcud1,omitempty"`   
	KeyLeft      string   `json:"kcub1,omitempty"`   
	KeyRight     string   `json:"kcuf1,omitempty"`   
	KeyBacktab   string   `json:"kcbt,omitempty"`    
	KeyExit      string   `json:"kext,omitempty"`    
	KeyClear     string   `json:"kclr,omitempty"`    
	KeyPrint     string   `json:"kprt,omitempty"`    
	KeyCancel    string   `json:"kcan,omitempty"`    
	Mouse        string   `json:"kmous,omitempty"`   
	MouseMode    string   `json:"XM,omitempty"`      
	AltChars     string   `json:"acsc,omitempty"`    
	EnterAcs     string   `json:"smacs,omitempty"`   
	ExitAcs      string   `json:"rmacs,omitempty"`   
	EnableAcs    string   `json:"enacs,omitempty"`   
	KeyShfRight  string   `json:"kRIT,omitempty"`    
	KeyShfLeft   string   `json:"kLFT,omitempty"`    
	KeyShfHome   string   `json:"kHOM,omitempty"`    
	KeyShfEnd    string   `json:"kEND,omitempty"`    
	SetFgBg         string `json:"_setfgbg,omitempty"`     
	SetFgBgRGB      string `json:"_setfgbgrgb,omitempty"`  
	SetFgRGB        string `json:"_setfrgb,omitempty"`     
	SetBgRGB        string `json:"_setbrgb,omitempty"`     
	KeyShfUp        string `json:"_kscu1,omitempty"`       
	KeyShfDown      string `json:"_kscud1,omitempty"`      
	KeyCtrlUp       string `json:"_kccu1,omitempty"`       
	KeyCtrlDown     string `json:"_kccud1,omitempty"`      
	KeyCtrlRight    string `json:"_kccuf1,omitempty"`      
	KeyCtrlLeft     string `json:"_kccub1,omitempty"`      
	KeyMetaUp       string `json:"_kmcu1,omitempty"`       
	KeyMetaDown     string `json:"_kmcud1,omitempty"`      
	KeyMetaRight    string `json:"_kmcuf1,omitempty"`      
	KeyMetaLeft     string `json:"_kmcub1,omitempty"`      
	KeyAltUp        string `json:"_kacu1,omitempty"`       
	KeyAltDown      string `json:"_kacud1,omitempty"`      
	KeyAltRight     string `json:"_kacuf1,omitempty"`      
	KeyAltLeft      string `json:"_kacub1,omitempty"`      
	KeyCtrlHome     string `json:"_kchome,omitempty"`
	KeyCtrlEnd      string `json:"_kcend,omitempty"`
	KeyMetaHome     string `json:"_kmhome,omitempty"`
	KeyMetaEnd      string `json:"_kmend,omitempty"`
	KeyAltHome      string `json:"_kahome,omitempty"`
	KeyAltEnd       string `json:"_kaend,omitempty"`
	KeyAltShfUp     string `json:"_kascu1,omitempty"`
	KeyAltShfDown   string `json:"_kascud1,omitempty"`
	KeyAltShfLeft   string `json:"_kascub1,omitempty"`
	KeyAltShfRight  string `json:"_kascuf1,omitempty"`
	KeyMetaShfUp    string `json:"_kmscu1,omitempty"`
	KeyMetaShfDown  string `json:"_kmscud1,omitempty"`
	KeyMetaShfLeft  string `json:"_kmscub1,omitempty"`
	KeyMetaShfRight string `json:"_kmscuf1,omitempty"`
	KeyCtrlShfUp    string `json:"_kcscu1,omitempty"`
	KeyCtrlShfDown  string `json:"_kcscud1,omitempty"`
	KeyCtrlShfLeft  string `json:"_kcscub1,omitempty"`
	KeyCtrlShfRight string `json:"_kcscuf1,omitempty"`
	KeyCtrlShfHome  string `json:"_kcHOME,omitempty"`
	KeyCtrlShfEnd   string `json:"_kcEND,omitempty"`
	KeyAltShfHome   string `json:"_kaHOME,omitempty"`
	KeyAltShfEnd    string `json:"_kaEND,omitempty"`
	KeyMetaShfHome  string `json:"_kmHOME,omitempty"`
	KeyMetaShfEnd   string `json:"_kmEND,omitempty"`
}
type stackElem struct {
	s     string
	i     int
	isStr bool
	isInt bool
}
type stack []stackElem
func (st stack) Push(v string) stack {
	e := stackElem{
		s:     v,
		isStr: true,
	}
	return append(st, e)
}
func (st stack) Pop() (string, stack) {
	v := ""
	if len(st) > 0 {
		e := st[len(st)-1]
		st = st[:len(st)-1]
		if e.isStr {
			v = e.s
		} else {
			v = strconv.Itoa(e.i)
		}
	}
	return v, st
}
func (st stack) PopInt() (int, stack) {
	if len(st) > 0 {
		e := st[len(st)-1]
		st = st[:len(st)-1]
		if e.isInt {
			return e.i, st
		} else if e.isStr {
			i, _ := strconv.Atoi(e.s)
			return i, st
		}
	}
	return 0, st
}
func (st stack) PopBool() (bool, stack) {
	if len(st) > 0 {
		e := st[len(st)-1]
		st = st[:len(st)-1]
		if e.isStr {
			if e.s == "1" {
				return true, st
			} else {
				return false, st
			}
		} else if e.i == 1 {
			return true, st
		} else {
			return false, st
		}
	}
	return false, st
}
func (st stack) PushInt(i int) stack {
	e := stackElem{
		i:     i,
		isInt: true,
	}
	return append(st, e)
}
func (st stack) PushBool(i bool) stack {
	if i {
		return st.PushInt(1)
	}
	return st.PushInt(0)
}
func nextch(s string, index int) (byte, int) {
	if index < len(s) {
		return s[index], index + 1
	}
	return 0, index
}
var svars [26]string
type paramsBuffer struct {
	out bytes.Buffer
	buf bytes.Buffer
	lk  sync.Mutex
}