| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 | package doorimport "strings"type BoxStyle struct {	Top_Left     string	Top_Right    string	Top          string	Side         string	Bottom_Left  string	Bottom_Right string	Middle_Left  string	Middle_Right string}// FUTURE:// Once we detect CP437 or Unicode, set BOXES to point to// BOXES_CP437 or BOXES_UNICODE.  That'll save us from having// to if Unicode when building boxes.  ;)var BOXES_CP437 = [4]BoxStyle{	/*		┌──┐		│  │		├──┤		└──┘	*/	BoxStyle{"\xda", "\xbf", "\xc4", "\xb3", "\xc0", "\xd9", "\xc3", "\xb4"},	/*		╔══╗		║  ║		╠══╣		╚══╝	*/	BoxStyle{"\xc9", "\xbb", "\xcd", "\xba", "\xc8", "\xbc", "\xcc", "\xb9"},	/*		╒══╕		│  │		╞══╡		╘══╛	*/	BoxStyle{"\xd5", "\xb8", "\xcd", "\xb3", "\xd4", "\xbe", "\xc6", "\xb5"},	/*		╓──╖		║  ║		╟──╢		╙──╜	*/	BoxStyle{"\xd6", "\xb7", "\xc4", "\xba", "\xd3", "\xbd", "\xc7", "\xb6"},}var BOXES_UNICODE = [4]BoxStyle{	BoxStyle{"\u250c", "\u2510", "\u2500", "\u2502", "\u2514", "\u2518", "\u251c", "\u2524"},	BoxStyle{"\u2554", "\u2557", "\u2550", "\u2551", "\u255a", "\u255d", "\u2560", "\u2563"},	BoxStyle{"\u2552", "\u2555", "\u2550", "\u2502", "\u2558", "\u255b", "\u255e", "\u2561"},	BoxStyle{"\u2553", "\u2556", "\u2500", "\u2551", "\u2559", "\u255c", "\u255f", "\u2562"},}var BOXES *[4]BoxStyle = &BOXES_CP437type Box struct {	Width int	Style int}func (b *Box) Top() string {	var style *BoxStyle = &BOXES[b.Style]	return style.Top_Left + strings.Repeat(style.Top, b.Width) + style.Top_Right}func (b *Box) Row(text string) string {	var style *BoxStyle = &BOXES[b.Style]	return style.Side + text + style.Side}func (b *Box) Middle() string {	var style *BoxStyle = &BOXES[b.Style]	return style.Middle_Left + strings.Repeat(style.Top, b.Width) + style.Middle_Right}func (b *Box) Bottom() string {	var style *BoxStyle = &BOXES[b.Style]	return style.Bottom_Left + strings.Repeat(style.Top, b.Width) + style.Bottom_Right}func AlertBox(text string, style int) []string {	var results []string	b := Box{Width: StringLen([]byte(text)), Style: style}	results = append(results, b.Top())	results = append(results, b.Row(text))	results = append(results, b.Bottom())	return results}
 |