package ncurses import ( "github.com/ebitengine/purego" ) var ncurses uintptr = 0 func ncursesFunction[T any](name string) T { if ncurses == 0 { var err error ncurses, err = purego.Dlopen(LIBRARY_PATH, purego.RTLD_GLOBAL | purego.RTLD_LAZY) if err != nil { panic(err) } } var tmp = new(T) purego.RegisterLibFunc(tmp, ncurses, name) return *tmp } type Window uintptr type voidFP func() int type winFP func(window Window) int type initscrFP func() Window var InitScr = ncursesFunction[initscrFP]("initscr") var EndWin = ncursesFunction[voidFP]("endwin") type newwinFP func(nlines, ncols, begin_x, begin_y int) Window var NewWin = ncursesFunction[newwinFP]("newwin") var DelWin = ncursesFunction[winFP]("delwin") type dupwinFP func(window Window) Window var DupWin = ncursesFunction[dupwinFP]("dupwin") var Refresh = ncursesFunction[voidFP]("refresh") var WRefresh = ncursesFunction[winFP]("wrefresh") var WNOutRefresh = ncursesFunction[winFP]("wnoutrefresh") var DoUpdate = ncursesFunction[voidFP]("doupdate") type waddstrFP func(window Window, str string) int var WAddStr = ncursesFunction[waddstrFP]("waddstr") type waddnstrFP func(window Window, str string, n int) int var WAddNStr = ncursesFunction[waddstrFP]("waddnstr") var GetMaxY = ncursesFunction[winFP]("getmaxy") var GetMaxX = ncursesFunction[winFP]("getmaxx") type mvwaddstrFP func(window Window, y, x int, str string) int var MvWAddStr = ncursesFunction[mvwaddstrFP]("mvwaddstr") type mvwaddchFP func(window Window, y, x int, char rune) int var MvWAddCh = ncursesFunction[mvwaddchFP]("mvwaddch") type waddchFP func(window Window, char rune) int var WAddCh = ncursesFunction[waddchFP]("waddch") type init_colorFP func(color, r, g, b int16) int var InitColor = ncursesFunction[init_colorFP]("init_color") type init_pairFP func(pair, fg, bg int16) int var InitPair = ncursesFunction[init_pairFP]("init_pair") var StartColor = ncursesFunction[voidFP]("start_color") type checkFP func() bool var HasColors = ncursesFunction[checkFP]("has_colors") type setflagFP func(window Window, bf bool) int var ClearOK = ncursesFunction[setflagFP]("clearok") var IdlOK = ncursesFunction[setflagFP]("idlok") var ScrollOk = ncursesFunction[setflagFP]("scrollok") type wscrlFP func(window Window, n int) int var WScrl = ncursesFunction[wscrlFP]("wscrl")