123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 |
- package main
- import (
- "bytes"
- "fmt"
- "log"
- "red-green/door"
- "strconv"
- "strings"
- "time"
- )
- func display_information(d *door.Door) {
- d.WriteS(door.Clrscr)
- var headerColor = door.ColorText("BRI CYAN")
- var keyColor = door.ColorText("BRI GREEN")
- var sepColor = door.ColorText("BRI YEL")
- var valColor = door.ColorText("CYAN")
- var nice_format func(string, string) string = func(key string, value string) string {
- return fmt.Sprintf("%s%-20s %s: %s%s", keyColor, key, sepColor, valColor, value) + door.CRNL
- }
- var offset string
- var header string = "DropFile: "
- offset = strings.Repeat(" ", len(header))
- d.WriteA(headerColor, header)
- d.WriteA(nice_format("Comm Type", strconv.Itoa(d.Config.Comm_type)))
- if d.Config.BBSID != "" {
- d.WriteA(offset, nice_format("BBS Software", d.Config.BBSID))
- }
- d.WriteA(offset, nice_format("Time Left", strconv.Itoa(d.Config.Time_left)))
- d.WriteA(offset, nice_format("Real Name", d.Config.Real_name))
- // d.Write(nice_format("Comm Handle", strconv.Itoa(d.Config.Comm_handle)))
- d.WriteA(offset, nice_format("Handle", d.Config.Handle))
- d.WriteA(offset, nice_format("User #", strconv.Itoa(d.Config.User_number)))
- d.WriteA(offset, nice_format("Security Level", strconv.Itoa(d.Config.Security_level)))
- d.WriteA(offset, nice_format("Node #", strconv.Itoa(d.Config.Node)))
- header = "Detected: "
- offset = strings.Repeat(" ", len(header))
- d.WriteA(door.CRNL, headerColor, header)
- d.WriteA(nice_format("Unicode", strconv.FormatBool(door.Unicode)))
- d.WriteA(offset, nice_format("CP437", strconv.FormatBool(door.CP437)))
- d.WriteA(offset, nice_format("Full CP437", strconv.FormatBool(door.Full_CP437)))
- d.WriteA(offset, nice_format("Screen Size", fmt.Sprintf("%d X %d", door.Width, door.Height)))
- var time time.Duration = d.TimeLeft()
- d.WriteA(offset, nice_format("Door Time Left", fmt.Sprintf("%d Hours, %d Minutes, %d Seconds", int(time.Hours()), int(time.Minutes())%60, int(time.Seconds())%60)))
- time = d.TimeUsed()
- d.WriteA(offset, nice_format("Door Time Used", fmt.Sprintf("%d Minutes, %d Seconds", int(time.Minutes()), int(time.Seconds())%60)))
- press_a_key(d)
- d.WriteA(door.Clrscr, door.CRNL, door.CRNL, door.CRNL)
- modules := GetModules()
- header = "Build: "
- offset = strings.Repeat(" ", len(header))
- d.WriteA(headerColor, header)
- gover, gitver, goarch, goos := GetVersion()
- d.WriteA(nice_format("go version", gover))
- d.WriteA(offset, nice_format("git commit", gitver))
- d.WriteA(offset, nice_format("Arch", goarch))
- d.WriteA(offset, nice_format("OS", goos))
- for mod, version := range modules {
- d.WriteA(offset, nice_format(mod, version))
- }
- }
- func display_ansi(d *door.Door) {
- var art []string = ANSIGrowl()
- d.WriteS(door.Clrscr)
- for _, line := range art {
- d.WriteS(line + door.CRNL)
- }
- }
- func input_demo(d *door.Door) {
- var ticker *time.Ticker = time.NewTicker(time.Second)
- var StopIt = make(chan bool)
- go func() {
- for {
- select {
- case <-StopIt:
- return
- case t := <-ticker.C:
- const tf = "January 2, 2006 03:04:05 PM MST"
- output := door.SavePos + door.GotoS(5, 2) + door.ColorTextS("BRI WHI ON CYAN") + t.Format(tf) + door.RestorePos
- d.WriteS(output)
- }
- }
- }()
- var inputColor = door.ColorText("BRI WHI ON BLUE")
- var inputColor2 = door.ColorText("BRI WHI ON GREEN")
- var prompt *door.Line = door.NewLine("What is YOUR Name: ")
- prompt.RenderF = door.RenderBlueYellow
- log.Println("BEGIN INPUT DEMO")
- d.WriteA(prompt.Output(), inputColor)
- var name string = d.Input(25)
- d.WriteA(door.Reset, door.CRNL)
- prompt.Text.Reset()
- prompt.Text.WriteString("What is Your Quest:")
- d.WriteA(prompt.Output(), inputColor2)
- var quest string = d.Input(35)
- d.WriteA(door.Reset, door.CRNL)
- prompt.Text.Reset()
- prompt.Text.WriteString("What is your Favorite CoLoR: ")
- d.WriteA(prompt.Output(), inputColor)
- var color string = d.Input(15)
- d.WriteA(door.Reset, door.CRNL)
- ticker.Stop()
- StopIt <- true
- log.Println("END INPUT DEMO")
- d.WriteA(fmt.Sprintf("You're %s on the %s quest, and fond of %s."+door.CRNL, name, quest, color))
- }
- func pctUpdate(pct *int64) func() int64 {
- return func() int64 {
- return *pct
- }
- }
- func progress_bars(d *door.Door) {
- d.WriteA(door.Clrscr)
- var barHalf *door.BarLine = &door.BarLine{Line: door.Line{DefaultColor: door.ColorText("BOLD YELLOW")}, Width: 20, Style: door.HALF_STEP}
- var barPercent *door.BarLine = &door.BarLine{Width: 30, Style: door.SOLID, PercentStyle: door.PERCENT_SPACE}
- barPercent.ColorRange = []door.BarRange{
- {Percent: 2500, Color: door.ColorText("RED")},
- {Percent: 5000, Color: door.ColorText("BROWN")},
- {Percent: 7500, Color: door.ColorText("BOLD YEL")},
- {Percent: 9500, Color: door.ColorText("GREEN")},
- {Percent: 10100, Color: door.ColorText("BRI GRE")}}
- var barGradient door.BarLine = door.BarLine{Width: 15, Style: door.GRADIENT, Line: door.Line{DefaultColor: door.ColorText("CYAN")}}
- var percentage int64
- barHalf.UpdateP = pctUpdate(&percentage)
- barPercent.UpdateP = pctUpdate(&percentage)
- barGradient.UpdateP = pctUpdate(&percentage)
- update_bars := func() {
- barHalf.Update()
- barPercent.Update()
- barGradient.Update()
- }
- d.WriteA(door.Goto(3, 12), "Half-Step")
- d.WriteA(door.Goto(25, 12), "% with space and Color Range")
- d.WriteA(door.Goto(57, 12), "Gradient")
- d.WriteA(door.HideCursor)
- bar_start := door.Goto(3, 15)
- for f := 0; f <= 100; f++ {
- d.WriteA(door.Goto(3, 10), door.Reset+fmt.Sprintf("Value: %d", f))
- percentage = int64(f * 100)
- update_bars()
- d.WriteA(bar_start, barHalf.Output(), " ", door.Reset, barPercent.Output(), door.Reset+" ", barGradient.Output())
- if d.Disconnect() {
- // don't continue to sleep if we're disconnected
- break
- }
- _, ex, err := d.WaitKey(time.Millisecond * 100)
- if err == nil {
- if ex == door.MOUSE {
- m, ok := d.GetMouse()
- if ok {
- if m.Button == 1 {
- // end loop
- f = 99
- }
- }
- } else {
- // end loop
- f = 99
- }
- }
- // time.Sleep(time.Millisecond * 100)
- }
- d.WriteA(door.ShowCursor)
- }
- func width_demo(d *door.Door) {
- var w int = door.Width
- var panel door.Panel = door.Panel{X: 1, Y: 1, Width: w}
- var lineColor = door.ColorText("WHI")
- var line string
- for y := 1; y <= door.Height; y++ {
- if y%10 == 0 {
- line = strings.Repeat("1234567890", w/10)
- for x := len(line); x < w; x++ {
- line += strconv.Itoa((x + 1) % 10)
- }
- } else {
- line = ""
- for x := 1; x < w; x++ {
- if x%10 == 0 {
- line += strconv.Itoa(y % 10)
- } else {
- line += " "
- }
- }
- }
- var l *door.Line = &door.Line{Text: bytes.NewBuffer([]byte(line)), DefaultColor: lineColor}
- panel.Lines = append(panel.Lines, l)
- }
- var message string = fmt.Sprintf("Screen Size: %d X %d", door.Width, door.Height)
- d.Write(panel.Output())
- // Output alert on top of panel
- var cx, cy int
- cx = (door.Width - len(message) + 2) / 2
- cy = (door.Height - 3) / 2
- var alert []string = door.AlertBox(message, 1)
- d.WriteA(door.ColorText("BRI YEL ON BLUE"))
- for idx, ab := range alert {
- d.WriteA(door.Goto(cx, cy+idx), ab)
- }
- d.WriteA(door.Reset, panel.GotoEnd())
- // Pause for key
- press_key_or_mouse(d)
- // d.WaitKey(door.Inactivity)
- panel.Lines = make([]*door.Line, 0)
- var background string = "BUGZ Test Door in GO "
- var bl int = len(background)
- for y := 1; y <= door.Height; y++ {
- offset := (y - 1) % bl
- line = background[offset:]
- for len(line) < w {
- if len(line)+bl <= w {
- line += background
- } else {
- line += background[0 : w-len(line)]
- }
- }
- var l *door.Line = &door.Line{Text: bytes.NewBuffer([]byte(line)), RenderF: door.RenderBlueYellow}
- panel.Lines = append(panel.Lines, l)
- }
- d.Write(panel.Output())
- // d.WaitKey(door.Inactivity)
- press_key_or_mouse(d)
- }
|