func Init() error {
	var err error
	interrupt, err = create_event()
	if err != nil {
		return err
	}
	in, err = syscall.Open("CONIN$", syscall.O_RDWR, 0)
	if err != nil {
		return err
	}
	out, err = syscall.Open("CONOUT$", syscall.O_RDWR, 0)
	if err != nil {
		return err
	}
	err = get_console_mode(in, &orig_mode)
	if err != nil {
		return err
	}
	err = set_console_mode(in, enable_window_input)
	if err != nil {
		return err
	}
	orig_size = get_term_size(out)
	win_size := get_win_size(out)
	err = set_console_screen_buffer_size(out, win_size)
	if err != nil {
		return err
	}
	err = get_console_cursor_info(out, &orig_cursor_info)
	if err != nil {
		return err
	}
	show_cursor(false)
	term_size = get_term_size(out)
	back_buffer.init(int(term_size.x), int(term_size.y))
	front_buffer.init(int(term_size.x), int(term_size.y))
	back_buffer.clear()
	front_buffer.clear()
	clear()
	diffbuf = make([]diff_msg, 0, 32)
	go input_event_producer()
	IsInit = true
	return nil
}
public API
Initializes termbox library. This function should be called before any other functions.
After successful initialization, the library must be finalized using 'Close' function.

Example usage:
err := termbox.Init()
if err != nil {
panic(err)
}
defer termbox.Close()
package termbox
import (
	"syscall"
)