curses 1.4.5 → 1.4.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (249) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/push_gem.yml +48 -0
  3. data/History.md +3 -0
  4. data/curses.gemspec +1 -1
  5. metadata +8 -247
  6. data/vendor/PDCurses/.gitignore +0 -47
  7. data/vendor/PDCurses/.travis.yml +0 -49
  8. data/vendor/PDCurses/CMakeLists.txt +0 -68
  9. data/vendor/PDCurses/HISTORY.md +0 -2036
  10. data/vendor/PDCurses/IMPLEMNT.md +0 -327
  11. data/vendor/PDCurses/Makefile +0 -27
  12. data/vendor/PDCurses/README.md +0 -77
  13. data/vendor/PDCurses/acs_defs.h +0 -265
  14. data/vendor/PDCurses/appveyor.yml +0 -218
  15. data/vendor/PDCurses/cmake/README.md +0 -71
  16. data/vendor/PDCurses/cmake/build_dependencies.cmake +0 -178
  17. data/vendor/PDCurses/cmake/build_options.cmake +0 -25
  18. data/vendor/PDCurses/cmake/dll_version.cmake +0 -26
  19. data/vendor/PDCurses/cmake/gen_config_header.cmake +0 -43
  20. data/vendor/PDCurses/cmake/get_version.cmake +0 -17
  21. data/vendor/PDCurses/cmake/make_uninstall.cmake +0 -19
  22. data/vendor/PDCurses/cmake/project_common.cmake +0 -121
  23. data/vendor/PDCurses/cmake/resource.in.cmake +0 -52
  24. data/vendor/PDCurses/cmake/sdl2_ttf/CMakeLists.txt +0 -83
  25. data/vendor/PDCurses/cmake/target_arch.cmake +0 -36
  26. data/vendor/PDCurses/cmake/version.in.cmake +0 -73
  27. data/vendor/PDCurses/cmake/watcom_open_dos16_toolchain.cmake +0 -96
  28. data/vendor/PDCurses/cmake/watcom_open_dos32_toolchain.cmake +0 -106
  29. data/vendor/PDCurses/cmake/watcom_open_os2v2_toolchain.cmake +0 -105
  30. data/vendor/PDCurses/curses.h +0 -1846
  31. data/vendor/PDCurses/curspriv.h +0 -134
  32. data/vendor/PDCurses/demos/README.md +0 -25
  33. data/vendor/PDCurses/demos/firework.c +0 -144
  34. data/vendor/PDCurses/demos/newtest.c +0 -581
  35. data/vendor/PDCurses/demos/ozdemo.c +0 -447
  36. data/vendor/PDCurses/demos/ptest.c +0 -283
  37. data/vendor/PDCurses/demos/rain.c +0 -157
  38. data/vendor/PDCurses/demos/testcurs.c +0 -1607
  39. data/vendor/PDCurses/demos/tui.c +0 -1048
  40. data/vendor/PDCurses/demos/tui.h +0 -65
  41. data/vendor/PDCurses/demos/tuidemo.c +0 -233
  42. data/vendor/PDCurses/demos/version.c +0 -61
  43. data/vendor/PDCurses/demos/worm.c +0 -432
  44. data/vendor/PDCurses/demos/xmas.c +0 -955
  45. data/vendor/PDCurses/dos/CMakeLists.txt +0 -47
  46. data/vendor/PDCurses/dos/Makefile +0 -105
  47. data/vendor/PDCurses/dos/Makefile.bcc +0 -83
  48. data/vendor/PDCurses/dos/Makefile.dmc +0 -257
  49. data/vendor/PDCurses/dos/Makefile.msc +0 -113
  50. data/vendor/PDCurses/dos/Makefile.wcc +0 -107
  51. data/vendor/PDCurses/dos/README.md +0 -51
  52. data/vendor/PDCurses/dos/bccdos.lrf +0 -9
  53. data/vendor/PDCurses/dos/mscdos.lrf +0 -50
  54. data/vendor/PDCurses/dos/pdcclip.c +0 -132
  55. data/vendor/PDCurses/dos/pdcdisp.c +0 -135
  56. data/vendor/PDCurses/dos/pdcdos.h +0 -194
  57. data/vendor/PDCurses/dos/pdcgetsc.c +0 -98
  58. data/vendor/PDCurses/dos/pdckbd.c +0 -513
  59. data/vendor/PDCurses/dos/pdcscrn.c +0 -785
  60. data/vendor/PDCurses/dos/pdcsetsc.c +0 -101
  61. data/vendor/PDCurses/dos/pdcutil.c +0 -212
  62. data/vendor/PDCurses/libobjs.mif +0 -26
  63. data/vendor/PDCurses/makedist.mif +0 -20
  64. data/vendor/PDCurses/man/Makefile +0 -37
  65. data/vendor/PDCurses/man/README.md +0 -21
  66. data/vendor/PDCurses/man/intro.md +0 -361
  67. data/vendor/PDCurses/man/manext.c +0 -119
  68. data/vendor/PDCurses/man/sdl.md +0 -152
  69. data/vendor/PDCurses/man/sdl2.md +0 -58
  70. data/vendor/PDCurses/man/x11.md +0 -407
  71. data/vendor/PDCurses/ncurses/CMakeLists.txt +0 -66
  72. data/vendor/PDCurses/ncurses/README.md +0 -26
  73. data/vendor/PDCurses/ncurses/makefile +0 -29
  74. data/vendor/PDCurses/os2/CMakeLists.txt +0 -41
  75. data/vendor/PDCurses/os2/Makefile +0 -132
  76. data/vendor/PDCurses/os2/Makefile.bcc +0 -90
  77. data/vendor/PDCurses/os2/Makefile.wcc +0 -43
  78. data/vendor/PDCurses/os2/README.md +0 -43
  79. data/vendor/PDCurses/os2/iccos2.lrf +0 -50
  80. data/vendor/PDCurses/os2/iccos2.mak +0 -256
  81. data/vendor/PDCurses/os2/pdcclip.c +0 -188
  82. data/vendor/PDCurses/os2/pdcdisp.c +0 -93
  83. data/vendor/PDCurses/os2/pdcgetsc.c +0 -89
  84. data/vendor/PDCurses/os2/pdckbd.c +0 -521
  85. data/vendor/PDCurses/os2/pdcos2.h +0 -55
  86. data/vendor/PDCurses/os2/pdcscrn.c +0 -449
  87. data/vendor/PDCurses/os2/pdcsetsc.c +0 -112
  88. data/vendor/PDCurses/os2/pdcutil.c +0 -52
  89. data/vendor/PDCurses/panel.h +0 -56
  90. data/vendor/PDCurses/pdcurses/README.md +0 -25
  91. data/vendor/PDCurses/pdcurses/addch.c +0 -693
  92. data/vendor/PDCurses/pdcurses/addchstr.c +0 -245
  93. data/vendor/PDCurses/pdcurses/addstr.c +0 -240
  94. data/vendor/PDCurses/pdcurses/attr.c +0 -359
  95. data/vendor/PDCurses/pdcurses/beep.c +0 -68
  96. data/vendor/PDCurses/pdcurses/bkgd.c +0 -223
  97. data/vendor/PDCurses/pdcurses/border.c +0 -411
  98. data/vendor/PDCurses/pdcurses/clear.c +0 -159
  99. data/vendor/PDCurses/pdcurses/color.c +0 -298
  100. data/vendor/PDCurses/pdcurses/debug.c +0 -109
  101. data/vendor/PDCurses/pdcurses/delch.c +0 -96
  102. data/vendor/PDCurses/pdcurses/deleteln.c +0 -211
  103. data/vendor/PDCurses/pdcurses/deprec.c +0 -27
  104. data/vendor/PDCurses/pdcurses/getch.c +0 -417
  105. data/vendor/PDCurses/pdcurses/getstr.c +0 -474
  106. data/vendor/PDCurses/pdcurses/getyx.c +0 -139
  107. data/vendor/PDCurses/pdcurses/inch.c +0 -127
  108. data/vendor/PDCurses/pdcurses/inchstr.c +0 -214
  109. data/vendor/PDCurses/pdcurses/initscr.c +0 -367
  110. data/vendor/PDCurses/pdcurses/inopts.c +0 -324
  111. data/vendor/PDCurses/pdcurses/insch.c +0 -271
  112. data/vendor/PDCurses/pdcurses/insstr.c +0 -264
  113. data/vendor/PDCurses/pdcurses/instr.c +0 -246
  114. data/vendor/PDCurses/pdcurses/kernel.c +0 -259
  115. data/vendor/PDCurses/pdcurses/keyname.c +0 -157
  116. data/vendor/PDCurses/pdcurses/mouse.c +0 -438
  117. data/vendor/PDCurses/pdcurses/move.c +0 -57
  118. data/vendor/PDCurses/pdcurses/outopts.c +0 -159
  119. data/vendor/PDCurses/pdcurses/overlay.c +0 -214
  120. data/vendor/PDCurses/pdcurses/pad.c +0 -260
  121. data/vendor/PDCurses/pdcurses/panel.c +0 -633
  122. data/vendor/PDCurses/pdcurses/printw.c +0 -126
  123. data/vendor/PDCurses/pdcurses/refresh.c +0 -279
  124. data/vendor/PDCurses/pdcurses/scanw.c +0 -578
  125. data/vendor/PDCurses/pdcurses/scr_dump.c +0 -213
  126. data/vendor/PDCurses/pdcurses/scroll.c +0 -101
  127. data/vendor/PDCurses/pdcurses/slk.c +0 -591
  128. data/vendor/PDCurses/pdcurses/termattr.c +0 -182
  129. data/vendor/PDCurses/pdcurses/terminfo.c +0 -217
  130. data/vendor/PDCurses/pdcurses/touch.c +0 -163
  131. data/vendor/PDCurses/pdcurses/util.c +0 -312
  132. data/vendor/PDCurses/pdcurses/window.c +0 -569
  133. data/vendor/PDCurses/sdl1/Makefile +0 -129
  134. data/vendor/PDCurses/sdl1/Makefile.mng +0 -110
  135. data/vendor/PDCurses/sdl1/README.md +0 -31
  136. data/vendor/PDCurses/sdl1/deffont.h +0 -385
  137. data/vendor/PDCurses/sdl1/deficon.h +0 -23
  138. data/vendor/PDCurses/sdl1/pdcclip.c +0 -131
  139. data/vendor/PDCurses/sdl1/pdcdisp.c +0 -373
  140. data/vendor/PDCurses/sdl1/pdcgetsc.c +0 -30
  141. data/vendor/PDCurses/sdl1/pdckbd.c +0 -405
  142. data/vendor/PDCurses/sdl1/pdcscrn.c +0 -414
  143. data/vendor/PDCurses/sdl1/pdcsdl.h +0 -31
  144. data/vendor/PDCurses/sdl1/pdcsetsc.c +0 -64
  145. data/vendor/PDCurses/sdl1/pdcutil.c +0 -40
  146. data/vendor/PDCurses/sdl1/sdltest.c +0 -79
  147. data/vendor/PDCurses/sdl2/CMakeLists.txt +0 -76
  148. data/vendor/PDCurses/sdl2/Makefile +0 -135
  149. data/vendor/PDCurses/sdl2/Makefile.vc +0 -164
  150. data/vendor/PDCurses/sdl2/README.md +0 -34
  151. data/vendor/PDCurses/sdl2/deffont.h +0 -385
  152. data/vendor/PDCurses/sdl2/deficon.h +0 -23
  153. data/vendor/PDCurses/sdl2/pdcclip.c +0 -93
  154. data/vendor/PDCurses/sdl2/pdcdisp.c +0 -534
  155. data/vendor/PDCurses/sdl2/pdcgetsc.c +0 -30
  156. data/vendor/PDCurses/sdl2/pdckbd.c +0 -480
  157. data/vendor/PDCurses/sdl2/pdcscrn.c +0 -443
  158. data/vendor/PDCurses/sdl2/pdcsdl.h +0 -33
  159. data/vendor/PDCurses/sdl2/pdcsetsc.c +0 -67
  160. data/vendor/PDCurses/sdl2/pdcutil.c +0 -39
  161. data/vendor/PDCurses/sdl2/sdltest.c +0 -81
  162. data/vendor/PDCurses/term.h +0 -48
  163. data/vendor/PDCurses/version.mif +0 -7
  164. data/vendor/PDCurses/vt/CMakeLists.txt +0 -28
  165. data/vendor/PDCurses/vt/Makefile +0 -135
  166. data/vendor/PDCurses/vt/Makefile.bcc +0 -111
  167. data/vendor/PDCurses/vt/Makefile.dmc +0 -258
  168. data/vendor/PDCurses/vt/Makefile.vc +0 -144
  169. data/vendor/PDCurses/vt/Makefile.wcc +0 -107
  170. data/vendor/PDCurses/vt/README.md +0 -64
  171. data/vendor/PDCurses/vt/pdcclip.c +0 -20
  172. data/vendor/PDCurses/vt/pdcdisp.c +0 -284
  173. data/vendor/PDCurses/vt/pdcgetsc.c +0 -27
  174. data/vendor/PDCurses/vt/pdckbd.c +0 -394
  175. data/vendor/PDCurses/vt/pdcscrn.c +0 -434
  176. data/vendor/PDCurses/vt/pdcsetsc.c +0 -45
  177. data/vendor/PDCurses/vt/pdcutil.c +0 -43
  178. data/vendor/PDCurses/vt/pdcvt.h +0 -16
  179. data/vendor/PDCurses/watcom.mif +0 -68
  180. data/vendor/PDCurses/wincon/CMakeLists.txt +0 -27
  181. data/vendor/PDCurses/wincon/Makefile.bcc +0 -88
  182. data/vendor/PDCurses/wincon/Makefile.dmc +0 -256
  183. data/vendor/PDCurses/wincon/Makefile.lcc +0 -273
  184. data/vendor/PDCurses/wincon/Makefile.mng +0 -176
  185. data/vendor/PDCurses/wincon/Makefile.vc +0 -144
  186. data/vendor/PDCurses/wincon/Makefile.wcc +0 -51
  187. data/vendor/PDCurses/wincon/README.md +0 -85
  188. data/vendor/PDCurses/wincon/pdcclip.c +0 -174
  189. data/vendor/PDCurses/wincon/pdcdisp.c +0 -143
  190. data/vendor/PDCurses/wincon/pdcgetsc.c +0 -55
  191. data/vendor/PDCurses/wincon/pdckbd.c +0 -786
  192. data/vendor/PDCurses/wincon/pdcscrn.c +0 -717
  193. data/vendor/PDCurses/wincon/pdcsetsc.c +0 -91
  194. data/vendor/PDCurses/wincon/pdcurses.ico +0 -0
  195. data/vendor/PDCurses/wincon/pdcurses.rc +0 -28
  196. data/vendor/PDCurses/wincon/pdcutil.c +0 -41
  197. data/vendor/PDCurses/wincon/pdcwin.h +0 -31
  198. data/vendor/PDCurses/wingui/CMakeLists.txt +0 -27
  199. data/vendor/PDCurses/wingui/Makefile.bcc +0 -85
  200. data/vendor/PDCurses/wingui/Makefile.dmc +0 -259
  201. data/vendor/PDCurses/wingui/Makefile.lcc +0 -273
  202. data/vendor/PDCurses/wingui/Makefile.mng +0 -171
  203. data/vendor/PDCurses/wingui/Makefile.vc +0 -144
  204. data/vendor/PDCurses/wingui/Makefile.wcc +0 -51
  205. data/vendor/PDCurses/wingui/README.md +0 -93
  206. data/vendor/PDCurses/wingui/pdcclip.c +0 -174
  207. data/vendor/PDCurses/wingui/pdcdisp.c +0 -718
  208. data/vendor/PDCurses/wingui/pdcgetsc.c +0 -30
  209. data/vendor/PDCurses/wingui/pdckbd.c +0 -143
  210. data/vendor/PDCurses/wingui/pdcscrn.c +0 -2797
  211. data/vendor/PDCurses/wingui/pdcsetsc.c +0 -89
  212. data/vendor/PDCurses/wingui/pdcurses.ico +0 -0
  213. data/vendor/PDCurses/wingui/pdcurses.rc +0 -28
  214. data/vendor/PDCurses/wingui/pdcutil.c +0 -61
  215. data/vendor/PDCurses/wingui/pdcwin.h +0 -122
  216. data/vendor/PDCurses/x11/Makefile.in +0 -754
  217. data/vendor/PDCurses/x11/PDCurses.spec +0 -82
  218. data/vendor/PDCurses/x11/README.md +0 -62
  219. data/vendor/PDCurses/x11/ScrollBox.c +0 -319
  220. data/vendor/PDCurses/x11/ScrollBox.h +0 -51
  221. data/vendor/PDCurses/x11/ScrollBoxP.h +0 -70
  222. data/vendor/PDCurses/x11/aclocal.m4 +0 -994
  223. data/vendor/PDCurses/x11/big_icon.xbm +0 -46
  224. data/vendor/PDCurses/x11/compose.h +0 -201
  225. data/vendor/PDCurses/x11/config.guess +0 -1500
  226. data/vendor/PDCurses/x11/config.h.in +0 -100
  227. data/vendor/PDCurses/x11/config.sub +0 -1616
  228. data/vendor/PDCurses/x11/configure +0 -6700
  229. data/vendor/PDCurses/x11/configure.ac +0 -295
  230. data/vendor/PDCurses/x11/debian/changelog +0 -6
  231. data/vendor/PDCurses/x11/debian/compat +0 -1
  232. data/vendor/PDCurses/x11/debian/control +0 -11
  233. data/vendor/PDCurses/x11/debian/copyright +0 -27
  234. data/vendor/PDCurses/x11/debian/rules +0 -98
  235. data/vendor/PDCurses/x11/install-sh +0 -253
  236. data/vendor/PDCurses/x11/little_icon.xbm +0 -14
  237. data/vendor/PDCurses/x11/ncurses_cfg.h +0 -45
  238. data/vendor/PDCurses/x11/pdcclip.c +0 -173
  239. data/vendor/PDCurses/x11/pdcdisp.c +0 -85
  240. data/vendor/PDCurses/x11/pdcgetsc.c +0 -28
  241. data/vendor/PDCurses/x11/pdckbd.c +0 -104
  242. data/vendor/PDCurses/x11/pdcscrn.c +0 -258
  243. data/vendor/PDCurses/x11/pdcsetsc.c +0 -95
  244. data/vendor/PDCurses/x11/pdcutil.c +0 -52
  245. data/vendor/PDCurses/x11/pdcx11.c +0 -316
  246. data/vendor/PDCurses/x11/pdcx11.h +0 -191
  247. data/vendor/PDCurses/x11/sb.c +0 -155
  248. data/vendor/PDCurses/x11/x11.c +0 -3686
  249. data/vendor/PDCurses/x11/xcurses-config.in +0 -81
@@ -1,432 +0,0 @@
1
- /****************************************************************************
2
- * Copyright (c) 2005 Free Software Foundation, Inc. *
3
- * *
4
- * Permission is hereby granted, free of charge, to any person obtaining a *
5
- * copy of this software and associated documentation files (the *
6
- * "Software"), to deal in the Software without restriction, including *
7
- * without limitation the rights to use, copy, modify, merge, publish, *
8
- * distribute, distribute with modifications, sublicense, and/or sell *
9
- * copies of the Software, and to permit persons to whom the Software is *
10
- * furnished to do so, subject to the following conditions: *
11
- * *
12
- * The above copyright notice and this permission notice shall be included *
13
- * in all copies or substantial portions of the Software. *
14
- * *
15
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
16
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
17
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
18
- * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
19
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
20
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
21
- * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
22
- * *
23
- * Except as contained in this notice, the name(s) of the above copyright *
24
- * holders shall not be used in advertising or otherwise to promote the *
25
- * sale, use or other dealings in this Software without prior written *
26
- * authorization. *
27
- ****************************************************************************/
28
-
29
- /*
30
-
31
- @@@ @@@ @@@@@@@@@@ @@@@@@@@@@@ @@@@@@@@@@@@
32
- @@@ @@@ @@@@@@@@@@@@ @@@@@@@@@@@@ @@@@@@@@@@@@@
33
- @@@ @@@ @@@@ @@@@ @@@@ @@@@ @@@ @@@@
34
- @@@ @@ @@@ @@@ @@@ @@@ @@@ @@@ @@@
35
- @@@ @@@@ @@@ @@@ @@@ @@@ @@@ @@@ @@@
36
- @@@@ @@@@ @@@@ @@@ @@@ @@@ @@@ @@@ @@@
37
- @@@@@@@@@@@@ @@@@ @@@@ @@@ @@@ @@@ @@@
38
- @@@@ @@@@ @@@@@@@@@@@@ @@@ @@@ @@@ @@@
39
- @@ @@ @@@@@@@@@@ @@@ @@@ @@@ @@@
40
-
41
- Eric P. Scott
42
- Caltech High Energy Physics
43
- October, 1980
44
-
45
- Color by Eric S. Raymond
46
- July, 1995
47
-
48
- Options:
49
- -f fill screen with copies of 'WORM' at start.
50
- -l <n> set worm length
51
- -n <n> set number of worms
52
- -t make worms leave droppings
53
- */
54
-
55
- #include <curses.h>
56
- #include <stdlib.h>
57
- #include <time.h>
58
-
59
- #define FLAVORS 7
60
-
61
- static chtype flavor[FLAVORS] =
62
- {
63
- 'O', '*', '#', '$', '%', '0', '@'
64
- };
65
-
66
- static const short xinc[] =
67
- {
68
- 1, 1, 1, 0, -1, -1, -1, 0
69
- },
70
- yinc[] =
71
- {
72
- -1, 0, 1, 1, 1, 0, -1, -1
73
- };
74
-
75
- static struct worm
76
- {
77
- int orientation, head;
78
- short *xpos, *ypos;
79
- } worm[40];
80
-
81
- static const char *field;
82
- static int length = 16, number = 3;
83
- static chtype trail = ' ';
84
-
85
- static const struct options
86
- {
87
- int nopts;
88
- int opts[3];
89
- } normal[8] =
90
- {
91
- { 3, { 7, 0, 1 } }, { 3, { 0, 1, 2 } }, { 3, { 1, 2, 3 } },
92
- { 3, { 2, 3, 4 } }, { 3, { 3, 4, 5 } }, { 3, { 4, 5, 6 } },
93
- { 3, { 5, 6, 7 } }, { 3, { 6, 7, 0 } }
94
- },
95
- upper[8] =
96
- {
97
- { 1, { 1, 0, 0 } }, { 2, { 1, 2, 0 } }, { 0, { 0, 0, 0 } },
98
- { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } }, { 2, { 4, 5, 0 } },
99
- { 1, { 5, 0, 0 } }, { 2, { 1, 5, 0 } }
100
- },
101
- left[8] =
102
- {
103
- { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } },
104
- { 2, { 2, 3, 0 } }, { 1, { 3, 0, 0 } }, { 2, { 3, 7, 0 } },
105
- { 1, { 7, 0, 0 } }, { 2, { 7, 0, 0 } }
106
- },
107
- right[8] =
108
- {
109
- { 1, { 7, 0, 0 } }, { 2, { 3, 7, 0 } }, { 1, { 3, 0, 0 } },
110
- { 2, { 3, 4, 0 } }, { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } },
111
- { 0, { 0, 0, 0 } }, { 2, { 6, 7, 0 } }
112
- },
113
- lower[8] =
114
- {
115
- { 0, { 0, 0, 0 } }, { 2, { 0, 1, 0 } }, { 1, { 1, 0, 0 } },
116
- { 2, { 1, 5, 0 } }, { 1, { 5, 0, 0 } }, { 2, { 5, 6, 0 } },
117
- { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } }
118
- },
119
- upleft[8] =
120
- {
121
- { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } },
122
- { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } }, { 1, { 3, 0, 0 } },
123
- { 2, { 1, 3, 0 } }, { 1, { 1, 0, 0 } }
124
- },
125
- upright[8] =
126
- {
127
- { 2, { 3, 5, 0 } }, { 1, { 3, 0, 0 } }, { 0, { 0, 0, 0 } },
128
- { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } },
129
- { 0, { 0, 0, 0 } }, { 1, { 5, 0, 0 } }
130
- },
131
- lowleft[8] =
132
- {
133
- { 3, { 7, 0, 1 } }, { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } },
134
- { 1, { 1, 0, 0 } }, { 2, { 1, 7, 0 } }, { 1, { 7, 0, 0 } },
135
- { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } }
136
- },
137
- lowright[8] =
138
- {
139
- { 0, { 0, 0, 0 } }, { 1, { 7, 0, 0 } }, { 2, { 5, 7, 0 } },
140
- { 1, { 5, 0, 0 } }, { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } },
141
- { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } }
142
- };
143
-
144
- static void cleanup(void)
145
- {
146
- standend();
147
- refresh();
148
- curs_set(1);
149
- endwin();
150
- }
151
-
152
- int main(int argc, char *argv[])
153
- {
154
- const struct options *op;
155
- struct worm *w;
156
- short **ref, *ip;
157
- int x, y, n, h, last, bottom, seed;
158
-
159
- for (x = 1; x < argc; x++)
160
- {
161
- char *p = argv[x];
162
-
163
- if (*p == '-')
164
- p++;
165
-
166
- switch (*p)
167
- {
168
- case 'f':
169
- field = "WORM";
170
- break;
171
- case 'l':
172
- if (++x == argc)
173
- goto usage;
174
-
175
- if ((length = atoi(argv[x])) < 2 || length > 1024)
176
- {
177
- fprintf(stderr, "%s: Invalid length\n", *argv);
178
- return EXIT_FAILURE;
179
- }
180
-
181
- break;
182
- case 'n':
183
- if (++x == argc)
184
- goto usage;
185
-
186
- if ((number = atoi(argv[x])) < 1 || number > 40)
187
- {
188
- fprintf(stderr, "%s: Invalid number of worms\n", *argv);
189
- return EXIT_FAILURE;
190
- }
191
-
192
- break;
193
- case 't':
194
- trail = '.';
195
- break;
196
- default:
197
- usage:
198
- fprintf(stderr, "usage: %s [-field] [-length #] "
199
- "[-number #] [-trail]\n", *argv);
200
- return EXIT_FAILURE;
201
- }
202
- }
203
-
204
- #ifdef XCURSES
205
- Xinitscr(argc, argv);
206
- #else
207
- initscr();
208
- #endif
209
- seed = (int)time((time_t *)0);
210
- srand(seed);
211
-
212
- noecho();
213
- cbreak();
214
- nonl();
215
- keypad(stdscr, TRUE);
216
-
217
- curs_set(0);
218
-
219
- bottom = LINES - 1;
220
- last = COLS - 1;
221
-
222
- #ifdef A_COLOR
223
- if (has_colors())
224
- {
225
- short bg = COLOR_BLACK;
226
- start_color();
227
-
228
- # if defined(NCURSES_VERSION) || (defined(PDC_BUILD) && PDC_BUILD > 3000)
229
- if (use_default_colors() == OK)
230
- bg = -1;
231
- # endif
232
-
233
- # define SET_COLOR(num, fg) \
234
- init_pair(num + 1, fg, bg); \
235
- flavor[num] |= COLOR_PAIR(num + 1) | A_BOLD
236
-
237
- SET_COLOR(0, COLOR_GREEN);
238
- SET_COLOR(1, COLOR_RED);
239
- SET_COLOR(2, COLOR_CYAN);
240
- SET_COLOR(3, COLOR_WHITE);
241
- SET_COLOR(4, COLOR_MAGENTA);
242
- SET_COLOR(5, COLOR_BLUE);
243
- SET_COLOR(6, COLOR_YELLOW);
244
- }
245
- #endif
246
-
247
- ref = malloc(sizeof(short *) * LINES);
248
-
249
- for (y = 0; y < LINES; y++)
250
- {
251
- ref[y] = malloc(sizeof(short) * COLS);
252
-
253
- for (x = 0; x < COLS; x++)
254
- ref[y][x] = 0;
255
- }
256
-
257
- #ifdef BADCORNER
258
- /* if addressing the lower right corner doesn't work in your curses */
259
-
260
- ref[bottom][last] = 1;
261
- #endif
262
-
263
- for (n = number, w = &worm[0]; --n >= 0; w++)
264
- {
265
- w->orientation = w->head = 0;
266
-
267
- if ((ip = malloc(sizeof(short) * (length + 1))) == NULL)
268
- {
269
- fprintf(stderr, "%s: out of memory\n", *argv);
270
- return EXIT_FAILURE;
271
- }
272
-
273
- w->xpos = ip;
274
-
275
- for (x = length; --x >= 0;)
276
- *ip++ = -1;
277
-
278
- if ((ip = malloc(sizeof(short) * (length + 1))) == NULL)
279
- {
280
- fprintf(stderr, "%s: out of memory\n", *argv);
281
- return EXIT_FAILURE;
282
- }
283
-
284
- w->ypos = ip;
285
-
286
- for (y = length; --y >= 0;)
287
- *ip++ = -1;
288
- }
289
-
290
- if (field)
291
- {
292
- const char *p = field;
293
-
294
- for (y = bottom; --y >= 0;)
295
- for (x = COLS; --x >= 0;)
296
- {
297
- addch((chtype) (*p++));
298
-
299
- if (!*p)
300
- p = field;
301
- }
302
- }
303
-
304
- napms(12);
305
- refresh();
306
- nodelay(stdscr, TRUE);
307
-
308
- for (;;)
309
- {
310
- int ch;
311
-
312
- if ((ch = getch()) > 0)
313
- {
314
- #ifdef KEY_RESIZE
315
- if (ch == KEY_RESIZE)
316
- {
317
- # ifdef PDCURSES
318
- resize_term(0, 0);
319
- erase();
320
- # endif
321
- if (last != COLS - 1)
322
- {
323
- for (y = 0; y <= bottom; y++)
324
- {
325
- ref[y] = realloc(ref[y], sizeof(short) * COLS);
326
-
327
- for (x = last + 1; x < COLS; x++)
328
- ref[y][x] = 0;
329
- }
330
-
331
- last = COLS - 1;
332
- }
333
-
334
- if (bottom != LINES - 1)
335
- {
336
- for (y = LINES; y <= bottom; y++)
337
- free(ref[y]);
338
-
339
- ref = realloc(ref, sizeof(short *) * LINES);
340
-
341
- for (y = bottom + 1; y < LINES; y++)
342
- {
343
- ref[y] = malloc(sizeof(short) * COLS);
344
-
345
- for (x = 0; x < COLS; x++)
346
- ref[y][x] = 0;
347
- }
348
-
349
- bottom = LINES - 1;
350
- }
351
- }
352
-
353
- #endif /* KEY_RESIZE */
354
-
355
- /* Make it simple to put this into single-step mode,
356
- or resume normal operation - T. Dickey */
357
-
358
- if (ch == 'q')
359
- {
360
- cleanup();
361
- return EXIT_SUCCESS;
362
- }
363
- else if (ch == 's')
364
- nodelay(stdscr, FALSE);
365
- else if (ch == ' ')
366
- nodelay(stdscr, TRUE);
367
- }
368
-
369
- for (n = 0, w = &worm[0]; n < number; n++, w++)
370
- {
371
- if ((x = w->xpos[h = w->head]) < 0)
372
- {
373
- move(y = w->ypos[h] = bottom, x = w->xpos[h] = 0);
374
- addch(flavor[n % FLAVORS]);
375
- ref[y][x]++;
376
- }
377
- else
378
- y = w->ypos[h];
379
-
380
- if (x > last)
381
- x = last;
382
-
383
- if (y > bottom)
384
- y = bottom;
385
-
386
- if (++h == length)
387
- h = 0;
388
-
389
- if (w->xpos[w->head = h] >= 0)
390
- {
391
- int x1 = w->xpos[h];
392
- int y1 = w->ypos[h];
393
-
394
- if (y1 < LINES && x1 < COLS && --ref[y1][x1] == 0)
395
- {
396
- move(y1, x1);
397
- addch(trail);
398
- }
399
- }
400
-
401
- op = &(x == 0 ? (y == 0 ? upleft :
402
- (y == bottom ? lowleft : left)) :
403
- (x == last ? (y == 0 ? upright :
404
- (y == bottom ? lowright : right)) :
405
- (y == 0 ? upper :
406
- (y == bottom ? lower : normal))))
407
- [w->orientation];
408
-
409
- switch (op->nopts)
410
- {
411
- case 0:
412
- cleanup();
413
- return EXIT_SUCCESS;
414
- case 1:
415
- w->orientation = op->opts[0];
416
- break;
417
- default:
418
- w->orientation = op->opts[rand() % op->nopts];
419
- }
420
-
421
- move(y += yinc[w->orientation], x += xinc[w->orientation]);
422
-
423
- if (y < 0)
424
- y = 0;
425
-
426
- addch(flavor[n % FLAVORS]);
427
- ref[w->ypos[h] = y][w->xpos[h] = x]++;
428
- }
429
- napms(12);
430
- refresh();
431
- }
432
- }