testdoor.go 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. package main
  2. import (
  3. "fmt"
  4. "red-green/door"
  5. "time"
  6. )
  7. func pctUpdate(pct *int64) func() int64 {
  8. return func() int64 {
  9. return *pct
  10. }
  11. }
  12. func press_a_key(d *door.Door) {
  13. d.Write(door.Reset + door.CRNL + "Press a key to continue...")
  14. d.Key()
  15. d.Write(door.CRNL)
  16. }
  17. func main() {
  18. fmt.Println("Starting testdoor.go")
  19. d := door.Door{}
  20. d.Init()
  21. reset := door.Reset
  22. bold := door.Color(1, 37, 40)
  23. bolder := door.ColorText("BLI BOLD YEL ON BLUE")
  24. d.Write("Welcome to " + bolder + "door32.sys" + reset + door.CRNL + "..." + door.CRNL)
  25. key := d.Key()
  26. message := fmt.Sprintf("Key %s%d / %x%s"+door.CRNL, bold, key, key, reset)
  27. d.Write(message)
  28. b := door.Box{20, 1}
  29. d.Write(b.Top() + door.CRNL)
  30. // or %-20s
  31. message = fmt.Sprintf("%20s", "SHAZAM!")
  32. d.Write(b.Row(message) + door.CRNL)
  33. d.Write(b.Middle() + door.CRNL)
  34. d.Write(b.Row(fmt.Sprintf("%-20s", "Meow?")) + door.CRNL)
  35. d.Write(b.Bottom() + door.CRNL)
  36. left := d.TimeLeft()
  37. message = fmt.Sprintf("You have %0.2f minutes / %0.2f seconds remaining..."+door.CRNL, left.Minutes(), left.Seconds())
  38. d.Write(message)
  39. inputColor := door.ColorText("BRI WHI ON BLUE")
  40. prompt := door.Line{Text: "What is YOUR Name: "}
  41. prompt.RenderF = door.RenderBlueYellow
  42. d.Write(prompt.Output() + inputColor)
  43. // d.Write("What is your name: " + inputColor)
  44. name := d.Input(25)
  45. d.Write(door.Reset + door.CRNL)
  46. if false {
  47. bar := door.BarLine{Line: door.Line{DefaultColor: door.ColorText("BOLD YELLOW")}, Width: 20, Style: door.HALF_STEP}
  48. bar2 := door.BarLine{Width: 30, Style: door.PERCENT_SPACE}
  49. bar2.ColorRange = []door.BarRange{
  50. {2500, door.ColorText("RED")},
  51. {5000, door.ColorText("BROWN")},
  52. {7500, door.ColorText("BOLD YEL")},
  53. {9500, door.ColorText("GREEN")},
  54. {10100, door.ColorText("BRI GRE")}}
  55. bar3 := door.BarLine{Width: 15, Style: door.GRADIENT, Line: door.Line{DefaultColor: door.ColorText("CYAN")}}
  56. var percentage int64
  57. bar.UpdateP = pctUpdate(&percentage)
  58. bar2.UpdateP = pctUpdate(&percentage)
  59. bar3.UpdateP = pctUpdate(&percentage)
  60. bar_start := door.Goto(3, 15)
  61. for f := 0; f <= 100; f++ {
  62. percentage = int64(f * 100)
  63. d.Write(bar_start)
  64. bar.Update()
  65. d.Write(bar.Output())
  66. d.Write(" " + door.Reset)
  67. bar2.Update()
  68. d.Write(bar2.Output())
  69. d.Write(door.Reset + " ")
  70. bar3.Update()
  71. d.Write(bar3.Output())
  72. if d.Disconnected {
  73. break
  74. }
  75. time.Sleep(time.Millisecond * 100)
  76. // d.WaitKey(0, 55000)
  77. }
  78. }
  79. press_a_key(&d)
  80. m := door.Menu{Panel: door.Panel{Width: 25,
  81. X: 5,
  82. Y: 5,
  83. Style: door.DOUBLE,
  84. Title: "Please Select:",
  85. TitleOffset: 3,
  86. BorderColor: door.ColorText("BRI CYAN ON BLA")}}
  87. m.SelectedR = door.MakeMenuRender(door.ColorText("BOLD CYAN"),
  88. door.ColorText("BOLD BLUE"),
  89. door.ColorText("BOLD CYAN"),
  90. door.ColorText("BOLD BLUE"))
  91. m.UnselectedR = door.MakeMenuRender(door.ColorText("BOLD YEL ON BLUE"),
  92. door.ColorText("BOLD WHI ON BLUE"),
  93. door.ColorText("BOLD YEL ON BLUE"),
  94. door.ColorText("BOLD CYAN ON BLUE"))
  95. m.AddSelection("1", "Play A Game")
  96. m.AddSelection("A", "Ask BUGZ for Help")
  97. m.AddSelection("D", "Drop to DOS")
  98. m.AddSelection("Q", "Quit")
  99. /*
  100. m.MenuOptions = []door.MenuOption{{rune('1'), "Play A Game"},
  101. {rune('A'), "Ask BUGZ for Help"},
  102. {rune('D'), "Drop to DOS"},
  103. {rune('Q'), "Quit"}}
  104. m.Build()
  105. */
  106. // Yes, the render functions are working
  107. /*
  108. test := door.Line{Text: "[T] Testing Render...", RenderF: m.SelectedR}
  109. d.Write(test.Output() + door.Reset + door.CRNL)
  110. test.RenderF = m.UnselectedR
  111. d.Write(test.Output() + door.Reset + door.CRNL)
  112. d.Write(door.Reset + door.CRNL + "Press a key to continue...")
  113. d.Key()
  114. */
  115. d.Write(door.Clrscr)
  116. item := m.Choose(&d)
  117. SPACE := [...]string{
  118. "\x1b[?7h\x1b[255D\x1b[0;1;32m\xdc\x1b[42m\xb2\xb2\xb2\xb2\xdb\x1b[40m\xdc \x1b[42m\xb1\xb1\xb2\xb2\xdb\xdb\x1b[4C\xb1\xb2\xb2\xdb\x1b[4C\xb1\xb2\xb2\xdb\xdb\x1b[3C\xb1\xb2\xb2\xdb\xdb\x1b[11C\xb1\xb2\xb2\xdb\x1b[4C\xb1\xb2\xb2\xdb\xdb\x1b[3C\xb1\xb2\xb2\xdb\xdb\x1b[40m",
  119. "\x1b[42m\xb1\xb1\x1b[4C\xdb\x1b[2C\xb1\xb1\x1b[2C\xdb\xdb\x1b[2C\xb0\xb1\x1b[2C\xb2\xdb\x1b[2C\xb0\xb1\x1b[3C\xdb\xdb\x1b[1C\xb0\xb1\x1b[3C\xdb\xdb\x1b[9C\xb0\xb1\x1b[2C\xb2\xdb\x1b[2C\xb0\xb1\x1b[3C\xdb\xdb\x1b[1C\xb0\xb1\x1b[3C\xdb\xdb\x1b[40m",
  120. "\x1b[42m\xb0\xb1\x1b[40m\xdc\xdc\xdc\xdc \x1b[42m\xb0\xb1\x1b[2C\xb2\xdb\x1b[1C \xb0\x1b[4C\xb2\xdb\x1b[1C\xb0\xb0\x1b[6C\xb0\xb0\x1b[0;32m\xdc\xdc\x1b[11C\x1b[42m \x1b[1m\xb0\x1b[4C\xb2\xdb\x1b[1C\xb0\xb0\x1b[6C\xb0\xb0\x1b[0;32m\xdc\xdc",
  121. " \x1b[1m\xdf\xdf\xdf\xdf\x1b[42m\xb2\xb2\x1b[2C\xb0\xb0\xb1\xb1\xb2\x1b[2C \xb0\xb0\xb1\xb1\xb2\xb2\x1b[1C \xb0\x1b[6C \xb0\x1b[0;32m\xdf\xdf\x1b[11C\x1b[42m \x1b[1m\xb0\xb0\xb1\xb1\xb2\xb2\x1b[1C \xb0\x1b[6C \xb0\x1b[0;32m\xdf\xdf",
  122. "\xdb \x1b[1;42m\xb1\xb2\x1b[2C \xb0\x1b[5C \x1b[4C\xb1\xb2\x1b[1C \x1b[3C\xb1\xb2\x1b[1C \x1b[3C\xb1\xb2\x1b[8C \x1b[4C\xb1\xb2\x1b[1C \x1b[3C\xb1\xb2\x1b[1C \x1b[3C\xb1\xb2\x1b[40m",
  123. "\x1b[0;32m\xdf\x1b[42m \x1b[40m\xdb\x1b[1;42m\xb0\xb0\xb1\x1b[0;32m\xdf \x1b[42m \x1b[7C \x1b[2C\x1b[1m\xb0\xb1\x1b[3C \xb0\xb0\xb1\x1b[3C \xb0\xb0\xb1\x1b[10C \x1b[2C\xb0\xb1\x1b[3C \xb0\xb0\xb1\x1b[3C \xb0\xb0\xb1\x1b[40m",
  124. "",
  125. "",
  126. "\x1b[37mBugz in space, with a deck of cards",
  127. "\x1b[0m",
  128. }
  129. d.Write(door.Clrscr)
  130. for _, line := range SPACE {
  131. if door.Unicode {
  132. d.Write(door.CP437_to_Unicode(line) + door.CRNL)
  133. } else {
  134. d.Write(line + door.CRNL)
  135. }
  136. }
  137. d.Write(door.Reset + door.CRNL + door.CRNL)
  138. d.Write(fmt.Sprintf("You chose %d from the menu."+door.CRNL, item))
  139. press_a_key(&d)
  140. message = fmt.Sprintf("Returning %s to the BBS..."+door.CRNL, name)
  141. d.Write(message)
  142. d.WaitKey(3, 0)
  143. left = d.TimeLeft()
  144. message = fmt.Sprintf("You had %0.2f minutes / %0.2f seconds remaining!"+door.CRNL, left.Minutes(), left.Seconds())
  145. d.Write(message)
  146. left = d.TimeUsed()
  147. d.Write(fmt.Sprintf("You used %0.2f seconds, or %0.2f minutes."+door.CRNL, left.Seconds(), left.Minutes()))
  148. fmt.Println("Ending testdoor.go")
  149. }