curses 1.4.4 → 1.4.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (258) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +6 -0
  3. data/.github/workflows/macos.yml +1 -1
  4. data/.github/workflows/push_gem.yml +48 -0
  5. data/.github/workflows/ubuntu.yml +2 -2
  6. data/.github/workflows/windows.yml +2 -2
  7. data/History.md +23 -0
  8. data/README.md +7 -0
  9. data/curses.gemspec +1 -1
  10. data/ext/curses/curses.c +7 -7
  11. data/sample/colors.rb +6 -1
  12. data/sample/form.rb +1 -1
  13. data/sample/menu.rb +2 -0
  14. metadata +9 -251
  15. data/vendor/PDCurses/.gitignore +0 -47
  16. data/vendor/PDCurses/.travis.yml +0 -49
  17. data/vendor/PDCurses/CMakeLists.txt +0 -68
  18. data/vendor/PDCurses/HISTORY.md +0 -2036
  19. data/vendor/PDCurses/IMPLEMNT.md +0 -327
  20. data/vendor/PDCurses/Makefile +0 -27
  21. data/vendor/PDCurses/README.md +0 -77
  22. data/vendor/PDCurses/acs_defs.h +0 -265
  23. data/vendor/PDCurses/appveyor.yml +0 -218
  24. data/vendor/PDCurses/cmake/README.md +0 -71
  25. data/vendor/PDCurses/cmake/build_dependencies.cmake +0 -178
  26. data/vendor/PDCurses/cmake/build_options.cmake +0 -25
  27. data/vendor/PDCurses/cmake/dll_version.cmake +0 -26
  28. data/vendor/PDCurses/cmake/gen_config_header.cmake +0 -43
  29. data/vendor/PDCurses/cmake/get_version.cmake +0 -17
  30. data/vendor/PDCurses/cmake/make_uninstall.cmake +0 -19
  31. data/vendor/PDCurses/cmake/project_common.cmake +0 -121
  32. data/vendor/PDCurses/cmake/resource.in.cmake +0 -52
  33. data/vendor/PDCurses/cmake/sdl2_ttf/CMakeLists.txt +0 -83
  34. data/vendor/PDCurses/cmake/target_arch.cmake +0 -36
  35. data/vendor/PDCurses/cmake/version.in.cmake +0 -73
  36. data/vendor/PDCurses/cmake/watcom_open_dos16_toolchain.cmake +0 -96
  37. data/vendor/PDCurses/cmake/watcom_open_dos32_toolchain.cmake +0 -106
  38. data/vendor/PDCurses/cmake/watcom_open_os2v2_toolchain.cmake +0 -105
  39. data/vendor/PDCurses/curses.h +0 -1846
  40. data/vendor/PDCurses/curspriv.h +0 -134
  41. data/vendor/PDCurses/demos/README.md +0 -25
  42. data/vendor/PDCurses/demos/firework.c +0 -144
  43. data/vendor/PDCurses/demos/newtest.c +0 -581
  44. data/vendor/PDCurses/demos/ozdemo.c +0 -447
  45. data/vendor/PDCurses/demos/ptest.c +0 -283
  46. data/vendor/PDCurses/demos/rain.c +0 -157
  47. data/vendor/PDCurses/demos/testcurs.c +0 -1607
  48. data/vendor/PDCurses/demos/tui.c +0 -1048
  49. data/vendor/PDCurses/demos/tui.h +0 -65
  50. data/vendor/PDCurses/demos/tuidemo.c +0 -233
  51. data/vendor/PDCurses/demos/version.c +0 -61
  52. data/vendor/PDCurses/demos/worm.c +0 -432
  53. data/vendor/PDCurses/demos/xmas.c +0 -955
  54. data/vendor/PDCurses/dos/CMakeLists.txt +0 -47
  55. data/vendor/PDCurses/dos/Makefile +0 -105
  56. data/vendor/PDCurses/dos/Makefile.bcc +0 -83
  57. data/vendor/PDCurses/dos/Makefile.dmc +0 -257
  58. data/vendor/PDCurses/dos/Makefile.msc +0 -113
  59. data/vendor/PDCurses/dos/Makefile.wcc +0 -107
  60. data/vendor/PDCurses/dos/README.md +0 -51
  61. data/vendor/PDCurses/dos/bccdos.lrf +0 -9
  62. data/vendor/PDCurses/dos/mscdos.lrf +0 -50
  63. data/vendor/PDCurses/dos/pdcclip.c +0 -132
  64. data/vendor/PDCurses/dos/pdcdisp.c +0 -135
  65. data/vendor/PDCurses/dos/pdcdos.h +0 -194
  66. data/vendor/PDCurses/dos/pdcgetsc.c +0 -98
  67. data/vendor/PDCurses/dos/pdckbd.c +0 -513
  68. data/vendor/PDCurses/dos/pdcscrn.c +0 -785
  69. data/vendor/PDCurses/dos/pdcsetsc.c +0 -101
  70. data/vendor/PDCurses/dos/pdcutil.c +0 -212
  71. data/vendor/PDCurses/libobjs.mif +0 -26
  72. data/vendor/PDCurses/makedist.mif +0 -20
  73. data/vendor/PDCurses/man/Makefile +0 -37
  74. data/vendor/PDCurses/man/README.md +0 -21
  75. data/vendor/PDCurses/man/intro.md +0 -361
  76. data/vendor/PDCurses/man/manext.c +0 -119
  77. data/vendor/PDCurses/man/sdl.md +0 -152
  78. data/vendor/PDCurses/man/sdl2.md +0 -58
  79. data/vendor/PDCurses/man/x11.md +0 -407
  80. data/vendor/PDCurses/ncurses/CMakeLists.txt +0 -66
  81. data/vendor/PDCurses/ncurses/README.md +0 -26
  82. data/vendor/PDCurses/ncurses/makefile +0 -29
  83. data/vendor/PDCurses/os2/CMakeLists.txt +0 -41
  84. data/vendor/PDCurses/os2/Makefile +0 -132
  85. data/vendor/PDCurses/os2/Makefile.bcc +0 -90
  86. data/vendor/PDCurses/os2/Makefile.wcc +0 -43
  87. data/vendor/PDCurses/os2/README.md +0 -43
  88. data/vendor/PDCurses/os2/iccos2.lrf +0 -50
  89. data/vendor/PDCurses/os2/iccos2.mak +0 -256
  90. data/vendor/PDCurses/os2/pdcclip.c +0 -188
  91. data/vendor/PDCurses/os2/pdcdisp.c +0 -93
  92. data/vendor/PDCurses/os2/pdcgetsc.c +0 -89
  93. data/vendor/PDCurses/os2/pdckbd.c +0 -521
  94. data/vendor/PDCurses/os2/pdcos2.h +0 -55
  95. data/vendor/PDCurses/os2/pdcscrn.c +0 -449
  96. data/vendor/PDCurses/os2/pdcsetsc.c +0 -112
  97. data/vendor/PDCurses/os2/pdcutil.c +0 -52
  98. data/vendor/PDCurses/panel.h +0 -56
  99. data/vendor/PDCurses/pdcurses/README.md +0 -25
  100. data/vendor/PDCurses/pdcurses/addch.c +0 -693
  101. data/vendor/PDCurses/pdcurses/addchstr.c +0 -245
  102. data/vendor/PDCurses/pdcurses/addstr.c +0 -240
  103. data/vendor/PDCurses/pdcurses/attr.c +0 -359
  104. data/vendor/PDCurses/pdcurses/beep.c +0 -68
  105. data/vendor/PDCurses/pdcurses/bkgd.c +0 -223
  106. data/vendor/PDCurses/pdcurses/border.c +0 -411
  107. data/vendor/PDCurses/pdcurses/clear.c +0 -159
  108. data/vendor/PDCurses/pdcurses/color.c +0 -298
  109. data/vendor/PDCurses/pdcurses/debug.c +0 -109
  110. data/vendor/PDCurses/pdcurses/delch.c +0 -96
  111. data/vendor/PDCurses/pdcurses/deleteln.c +0 -211
  112. data/vendor/PDCurses/pdcurses/deprec.c +0 -27
  113. data/vendor/PDCurses/pdcurses/getch.c +0 -417
  114. data/vendor/PDCurses/pdcurses/getstr.c +0 -474
  115. data/vendor/PDCurses/pdcurses/getyx.c +0 -139
  116. data/vendor/PDCurses/pdcurses/inch.c +0 -127
  117. data/vendor/PDCurses/pdcurses/inchstr.c +0 -214
  118. data/vendor/PDCurses/pdcurses/initscr.c +0 -367
  119. data/vendor/PDCurses/pdcurses/inopts.c +0 -324
  120. data/vendor/PDCurses/pdcurses/insch.c +0 -271
  121. data/vendor/PDCurses/pdcurses/insstr.c +0 -264
  122. data/vendor/PDCurses/pdcurses/instr.c +0 -246
  123. data/vendor/PDCurses/pdcurses/kernel.c +0 -259
  124. data/vendor/PDCurses/pdcurses/keyname.c +0 -157
  125. data/vendor/PDCurses/pdcurses/mouse.c +0 -438
  126. data/vendor/PDCurses/pdcurses/move.c +0 -57
  127. data/vendor/PDCurses/pdcurses/outopts.c +0 -159
  128. data/vendor/PDCurses/pdcurses/overlay.c +0 -214
  129. data/vendor/PDCurses/pdcurses/pad.c +0 -260
  130. data/vendor/PDCurses/pdcurses/panel.c +0 -633
  131. data/vendor/PDCurses/pdcurses/printw.c +0 -126
  132. data/vendor/PDCurses/pdcurses/refresh.c +0 -279
  133. data/vendor/PDCurses/pdcurses/scanw.c +0 -578
  134. data/vendor/PDCurses/pdcurses/scr_dump.c +0 -213
  135. data/vendor/PDCurses/pdcurses/scroll.c +0 -101
  136. data/vendor/PDCurses/pdcurses/slk.c +0 -591
  137. data/vendor/PDCurses/pdcurses/termattr.c +0 -182
  138. data/vendor/PDCurses/pdcurses/terminfo.c +0 -217
  139. data/vendor/PDCurses/pdcurses/touch.c +0 -163
  140. data/vendor/PDCurses/pdcurses/util.c +0 -312
  141. data/vendor/PDCurses/pdcurses/window.c +0 -569
  142. data/vendor/PDCurses/sdl1/Makefile +0 -129
  143. data/vendor/PDCurses/sdl1/Makefile.mng +0 -110
  144. data/vendor/PDCurses/sdl1/README.md +0 -31
  145. data/vendor/PDCurses/sdl1/deffont.h +0 -385
  146. data/vendor/PDCurses/sdl1/deficon.h +0 -23
  147. data/vendor/PDCurses/sdl1/pdcclip.c +0 -131
  148. data/vendor/PDCurses/sdl1/pdcdisp.c +0 -373
  149. data/vendor/PDCurses/sdl1/pdcgetsc.c +0 -30
  150. data/vendor/PDCurses/sdl1/pdckbd.c +0 -405
  151. data/vendor/PDCurses/sdl1/pdcscrn.c +0 -414
  152. data/vendor/PDCurses/sdl1/pdcsdl.h +0 -31
  153. data/vendor/PDCurses/sdl1/pdcsetsc.c +0 -64
  154. data/vendor/PDCurses/sdl1/pdcutil.c +0 -40
  155. data/vendor/PDCurses/sdl1/sdltest.c +0 -79
  156. data/vendor/PDCurses/sdl2/CMakeLists.txt +0 -76
  157. data/vendor/PDCurses/sdl2/Makefile +0 -135
  158. data/vendor/PDCurses/sdl2/Makefile.vc +0 -164
  159. data/vendor/PDCurses/sdl2/README.md +0 -34
  160. data/vendor/PDCurses/sdl2/deffont.h +0 -385
  161. data/vendor/PDCurses/sdl2/deficon.h +0 -23
  162. data/vendor/PDCurses/sdl2/pdcclip.c +0 -93
  163. data/vendor/PDCurses/sdl2/pdcdisp.c +0 -534
  164. data/vendor/PDCurses/sdl2/pdcgetsc.c +0 -30
  165. data/vendor/PDCurses/sdl2/pdckbd.c +0 -480
  166. data/vendor/PDCurses/sdl2/pdcscrn.c +0 -443
  167. data/vendor/PDCurses/sdl2/pdcsdl.h +0 -33
  168. data/vendor/PDCurses/sdl2/pdcsetsc.c +0 -67
  169. data/vendor/PDCurses/sdl2/pdcutil.c +0 -39
  170. data/vendor/PDCurses/sdl2/sdltest.c +0 -81
  171. data/vendor/PDCurses/term.h +0 -48
  172. data/vendor/PDCurses/version.mif +0 -7
  173. data/vendor/PDCurses/vt/CMakeLists.txt +0 -28
  174. data/vendor/PDCurses/vt/Makefile +0 -135
  175. data/vendor/PDCurses/vt/Makefile.bcc +0 -111
  176. data/vendor/PDCurses/vt/Makefile.dmc +0 -258
  177. data/vendor/PDCurses/vt/Makefile.vc +0 -144
  178. data/vendor/PDCurses/vt/Makefile.wcc +0 -107
  179. data/vendor/PDCurses/vt/README.md +0 -64
  180. data/vendor/PDCurses/vt/pdcclip.c +0 -20
  181. data/vendor/PDCurses/vt/pdcdisp.c +0 -284
  182. data/vendor/PDCurses/vt/pdcgetsc.c +0 -27
  183. data/vendor/PDCurses/vt/pdckbd.c +0 -394
  184. data/vendor/PDCurses/vt/pdcscrn.c +0 -434
  185. data/vendor/PDCurses/vt/pdcsetsc.c +0 -45
  186. data/vendor/PDCurses/vt/pdcutil.c +0 -43
  187. data/vendor/PDCurses/vt/pdcvt.h +0 -16
  188. data/vendor/PDCurses/watcom.mif +0 -68
  189. data/vendor/PDCurses/wincon/CMakeLists.txt +0 -27
  190. data/vendor/PDCurses/wincon/Makefile.bcc +0 -88
  191. data/vendor/PDCurses/wincon/Makefile.dmc +0 -256
  192. data/vendor/PDCurses/wincon/Makefile.lcc +0 -273
  193. data/vendor/PDCurses/wincon/Makefile.mng +0 -176
  194. data/vendor/PDCurses/wincon/Makefile.vc +0 -144
  195. data/vendor/PDCurses/wincon/Makefile.wcc +0 -51
  196. data/vendor/PDCurses/wincon/README.md +0 -85
  197. data/vendor/PDCurses/wincon/pdcclip.c +0 -174
  198. data/vendor/PDCurses/wincon/pdcdisp.c +0 -143
  199. data/vendor/PDCurses/wincon/pdcgetsc.c +0 -55
  200. data/vendor/PDCurses/wincon/pdckbd.c +0 -786
  201. data/vendor/PDCurses/wincon/pdcscrn.c +0 -717
  202. data/vendor/PDCurses/wincon/pdcsetsc.c +0 -91
  203. data/vendor/PDCurses/wincon/pdcurses.ico +0 -0
  204. data/vendor/PDCurses/wincon/pdcurses.rc +0 -28
  205. data/vendor/PDCurses/wincon/pdcutil.c +0 -41
  206. data/vendor/PDCurses/wincon/pdcwin.h +0 -31
  207. data/vendor/PDCurses/wingui/CMakeLists.txt +0 -27
  208. data/vendor/PDCurses/wingui/Makefile.bcc +0 -85
  209. data/vendor/PDCurses/wingui/Makefile.dmc +0 -259
  210. data/vendor/PDCurses/wingui/Makefile.lcc +0 -273
  211. data/vendor/PDCurses/wingui/Makefile.mng +0 -171
  212. data/vendor/PDCurses/wingui/Makefile.vc +0 -144
  213. data/vendor/PDCurses/wingui/Makefile.wcc +0 -51
  214. data/vendor/PDCurses/wingui/README.md +0 -93
  215. data/vendor/PDCurses/wingui/pdcclip.c +0 -174
  216. data/vendor/PDCurses/wingui/pdcdisp.c +0 -718
  217. data/vendor/PDCurses/wingui/pdcgetsc.c +0 -30
  218. data/vendor/PDCurses/wingui/pdckbd.c +0 -143
  219. data/vendor/PDCurses/wingui/pdcscrn.c +0 -2797
  220. data/vendor/PDCurses/wingui/pdcsetsc.c +0 -89
  221. data/vendor/PDCurses/wingui/pdcurses.ico +0 -0
  222. data/vendor/PDCurses/wingui/pdcurses.rc +0 -28
  223. data/vendor/PDCurses/wingui/pdcutil.c +0 -61
  224. data/vendor/PDCurses/wingui/pdcwin.h +0 -122
  225. data/vendor/PDCurses/x11/Makefile.in +0 -754
  226. data/vendor/PDCurses/x11/PDCurses.spec +0 -82
  227. data/vendor/PDCurses/x11/README.md +0 -62
  228. data/vendor/PDCurses/x11/ScrollBox.c +0 -319
  229. data/vendor/PDCurses/x11/ScrollBox.h +0 -51
  230. data/vendor/PDCurses/x11/ScrollBoxP.h +0 -70
  231. data/vendor/PDCurses/x11/aclocal.m4 +0 -994
  232. data/vendor/PDCurses/x11/big_icon.xbm +0 -46
  233. data/vendor/PDCurses/x11/compose.h +0 -201
  234. data/vendor/PDCurses/x11/config.guess +0 -1500
  235. data/vendor/PDCurses/x11/config.h.in +0 -100
  236. data/vendor/PDCurses/x11/config.sub +0 -1616
  237. data/vendor/PDCurses/x11/configure +0 -6700
  238. data/vendor/PDCurses/x11/configure.ac +0 -295
  239. data/vendor/PDCurses/x11/debian/changelog +0 -6
  240. data/vendor/PDCurses/x11/debian/compat +0 -1
  241. data/vendor/PDCurses/x11/debian/control +0 -11
  242. data/vendor/PDCurses/x11/debian/copyright +0 -27
  243. data/vendor/PDCurses/x11/debian/rules +0 -98
  244. data/vendor/PDCurses/x11/install-sh +0 -253
  245. data/vendor/PDCurses/x11/little_icon.xbm +0 -14
  246. data/vendor/PDCurses/x11/ncurses_cfg.h +0 -45
  247. data/vendor/PDCurses/x11/pdcclip.c +0 -173
  248. data/vendor/PDCurses/x11/pdcdisp.c +0 -85
  249. data/vendor/PDCurses/x11/pdcgetsc.c +0 -28
  250. data/vendor/PDCurses/x11/pdckbd.c +0 -104
  251. data/vendor/PDCurses/x11/pdcscrn.c +0 -258
  252. data/vendor/PDCurses/x11/pdcsetsc.c +0 -95
  253. data/vendor/PDCurses/x11/pdcutil.c +0 -52
  254. data/vendor/PDCurses/x11/pdcx11.c +0 -316
  255. data/vendor/PDCurses/x11/pdcx11.h +0 -191
  256. data/vendor/PDCurses/x11/sb.c +0 -155
  257. data/vendor/PDCurses/x11/x11.c +0 -3686
  258. data/vendor/PDCurses/x11/xcurses-config.in +0 -81
@@ -1,578 +0,0 @@
1
- /* Public Domain Curses */
2
-
3
- #include <curspriv.h>
4
-
5
- /*man-start**************************************************************
6
-
7
- scanw
8
- -----
9
-
10
- ### Synopsis
11
-
12
- int scanw(const char *fmt, ...);
13
- int wscanw(WINDOW *win, const char *fmt, ...);
14
- int mvscanw(int y, int x, const char *fmt, ...);
15
- int mvwscanw(WINDOW *win, int y, int x, const char *fmt, ...);
16
- int vwscanw(WINDOW *win, const char *fmt, va_list varglist);
17
- int vw_scanw(WINDOW *win, const char *fmt, va_list varglist);
18
-
19
- ### Description
20
-
21
- These routines correspond to the standard C library's scanf()
22
- family. Each gets a string from the window via wgetnstr(), and
23
- uses the resulting line as input for the scan.
24
-
25
- ### Return Value
26
-
27
- On successful completion, these functions return the number of
28
- items successfully matched. Otherwise they return ERR.
29
-
30
- ### Portability
31
- X/Open BSD SYS V
32
- scanw Y Y Y
33
- wscanw Y Y Y
34
- mvscanw Y Y Y
35
- mvwscanw Y Y Y
36
- vwscanw Y - 4.0
37
- vw_scanw Y
38
-
39
- **man-end****************************************************************/
40
-
41
- #include <string.h>
42
-
43
- #ifndef HAVE_VSSCANF
44
- # include <stdlib.h>
45
- # include <ctype.h>
46
- # include <limits.h>
47
-
48
- static int _pdc_vsscanf(const char *, const char *, va_list);
49
-
50
- # define vsscanf _pdc_vsscanf
51
- #endif
52
-
53
- int vwscanw(WINDOW *win, const char *fmt, va_list varglist)
54
- {
55
- char scanbuf[256];
56
-
57
- PDC_LOG(("vwscanw() - called\n"));
58
-
59
- if (wgetnstr(win, scanbuf, 255) == ERR)
60
- return ERR;
61
-
62
- return vsscanf(scanbuf, fmt, varglist);
63
- }
64
-
65
- int scanw(const char *fmt, ...)
66
- {
67
- va_list args;
68
- int retval;
69
-
70
- PDC_LOG(("scanw() - called\n"));
71
-
72
- va_start(args, fmt);
73
- retval = vwscanw(stdscr, fmt, args);
74
- va_end(args);
75
-
76
- return retval;
77
- }
78
-
79
- int wscanw(WINDOW *win, const char *fmt, ...)
80
- {
81
- va_list args;
82
- int retval;
83
-
84
- PDC_LOG(("wscanw() - called\n"));
85
-
86
- va_start(args, fmt);
87
- retval = vwscanw(win, fmt, args);
88
- va_end(args);
89
-
90
- return retval;
91
- }
92
-
93
- int mvscanw(int y, int x, const char *fmt, ...)
94
- {
95
- va_list args;
96
- int retval;
97
-
98
- PDC_LOG(("mvscanw() - called\n"));
99
-
100
- if (move(y, x) == ERR)
101
- return ERR;
102
-
103
- va_start(args, fmt);
104
- retval = vwscanw(stdscr, fmt, args);
105
- va_end(args);
106
-
107
- return retval;
108
- }
109
-
110
- int mvwscanw(WINDOW *win, int y, int x, const char *fmt, ...)
111
- {
112
- va_list args;
113
- int retval;
114
-
115
- PDC_LOG(("mvscanw() - called\n"));
116
-
117
- if (wmove(win, y, x) == ERR)
118
- return ERR;
119
-
120
- va_start(args, fmt);
121
- retval = vwscanw(win, fmt, args);
122
- va_end(args);
123
-
124
- return retval;
125
- }
126
-
127
- int vw_scanw(WINDOW *win, const char *fmt, va_list varglist)
128
- {
129
- PDC_LOG(("vw_scanw() - called\n"));
130
-
131
- return vwscanw(win, fmt, varglist);
132
- }
133
-
134
- #ifndef HAVE_VSSCANF
135
-
136
- /* _pdc_vsscanf() - Internal routine to parse and format an input
137
- buffer. It scans a series of input fields; each field is formatted
138
- according to a supplied format string and the formatted input is
139
- stored in the variable number of addresses passed. Returns the number
140
- of input fields or EOF on error.
141
-
142
- Don't compile this unless required. Some compilers (at least Borland
143
- C++ 3.0) have to link with math libraries due to the use of floats.
144
-
145
- Based on vsscanf.c and input.c from emx 0.8f library source,
146
- Copyright (c) 1990-1992 by Eberhard Mattes, who has kindly agreed to
147
- its inclusion in PDCurses. */
148
-
149
- #define WHITE(x) ((x) == ' ' || (x) == '\t' || (x) == '\n')
150
-
151
- #define NEXT(x) \
152
- do { \
153
- x = *buf++; \
154
- if (!x) \
155
- return (count ? count : EOF); \
156
- ++chars; \
157
- } while (0)
158
-
159
- #define UNGETC() \
160
- do { \
161
- --buf; --chars; \
162
- } while (0)
163
-
164
- static int _pdc_vsscanf(const char *buf, const char *fmt, va_list arg_ptr)
165
- {
166
- int count, chars, c, width, radix, d, i;
167
- int *int_ptr;
168
- long *long_ptr;
169
- short *short_ptr;
170
- char *char_ptr;
171
- unsigned char f;
172
- char neg, assign, ok, size;
173
- long n;
174
- char map[256], end;
175
- double dx, dd, *dbl_ptr;
176
- float *flt_ptr;
177
- int exp;
178
- char eneg;
179
-
180
- count = 0;
181
- chars = 0;
182
- c = 0;
183
- while ((f = *fmt) != 0)
184
- {
185
- if (WHITE(f))
186
- {
187
- do
188
- {
189
- ++fmt;
190
- f = *fmt;
191
- }
192
- while (WHITE(f));
193
- do
194
- {
195
- c = *buf++;
196
- if (!c)
197
- {
198
- if (!f || count)
199
- return count;
200
- else
201
- return EOF;
202
- } else
203
- ++chars;
204
- }
205
- while (WHITE(c));
206
- UNGETC();
207
- } else if (f != '%')
208
- {
209
- NEXT(c);
210
- if (c != f)
211
- return count;
212
- ++fmt;
213
- } else
214
- {
215
- assign = TRUE;
216
- width = INT_MAX;
217
- char_ptr = NULL;
218
- ++fmt;
219
- if (*fmt == '*')
220
- {
221
- assign = FALSE;
222
- ++fmt;
223
- }
224
- if (isdigit(*fmt))
225
- {
226
- width = 0;
227
- while (isdigit(*fmt))
228
- width = width * 10 + (*fmt++ - '0');
229
- if (!width)
230
- width = INT_MAX;
231
- }
232
- size = 0;
233
- if (*fmt == 'h' || *fmt == 'l')
234
- size = *fmt++;
235
- f = *fmt;
236
- switch (f)
237
- {
238
- case 'c':
239
- if (width == INT_MAX)
240
- width = 1;
241
- if (assign)
242
- char_ptr = va_arg(arg_ptr, char *);
243
- while (width > 0)
244
- {
245
- --width;
246
- NEXT(c);
247
- if (assign)
248
- {
249
- *char_ptr++ = (char) c;
250
- ++count;
251
- }
252
- }
253
- break;
254
- case '[':
255
- memset(map, 0, 256);
256
- end = 0;
257
- ++fmt;
258
- if (*fmt == '^')
259
- {
260
- ++fmt;
261
- end = 1;
262
- }
263
- i = 0;
264
- for (;;)
265
- {
266
- f = (unsigned char) *fmt;
267
- switch (f)
268
- {
269
- case 0:
270
- /* avoid skipping past 0 */
271
- --fmt;
272
- NEXT(c);
273
- goto string;
274
- case ']':
275
- if (i > 0)
276
- {
277
- NEXT(c);
278
- goto string;
279
- }
280
- /* no break */
281
- default:
282
- if (fmt[1] == '-' && fmt[2]
283
- && f < (unsigned char)fmt[2])
284
- {
285
- memset(map + f, 1, (unsigned char)fmt[2] - f);
286
- fmt += 2;
287
- }
288
- else
289
- map[f] = 1;
290
- break;
291
- }
292
- ++fmt;
293
- ++i;
294
- }
295
- case 's':
296
- memset(map, 0, 256);
297
- map[' '] = 1;
298
- map['\n'] = 1;
299
- map['\r'] = 1;
300
- map['\t'] = 1;
301
- end = 1;
302
- do
303
- {
304
- NEXT(c);
305
- }
306
- while (WHITE(c));
307
- string:
308
- if (assign)
309
- char_ptr = va_arg(arg_ptr, char *);
310
- while (width > 0 && map[(unsigned char) c] != end)
311
- {
312
- --width;
313
- if (assign)
314
- *char_ptr++ = (char) c;
315
- c = *buf++;
316
- if (!c)
317
- break;
318
- else
319
- ++chars;
320
- }
321
- if (assign)
322
- {
323
- *char_ptr = 0;
324
- ++count;
325
- }
326
- if (!c)
327
- return count;
328
- else
329
- UNGETC();
330
- break;
331
- case 'f':
332
- case 'e':
333
- case 'E':
334
- case 'g':
335
- case 'G':
336
- neg = ok = FALSE;
337
- dx = 0.0;
338
- do
339
- {
340
- NEXT(c);
341
- }
342
- while (WHITE(c));
343
- if (c == '+')
344
- {
345
- NEXT(c);
346
- --width;
347
- } else if (c == '-')
348
- {
349
- neg = TRUE;
350
- NEXT(c);
351
- --width;
352
- }
353
- while (width > 0 && isdigit(c))
354
- {
355
- --width;
356
- dx = dx * 10.0 + (double) (c - '0');
357
- ok = TRUE;
358
- c = *buf++;
359
- if (!c)
360
- break;
361
- else
362
- ++chars;
363
- }
364
- if (width > 0 && c == '.')
365
- {
366
- --width;
367
- dd = 10.0;
368
- NEXT(c);
369
- while (width > 0 && isdigit(c))
370
- {
371
- --width;
372
- dx += (double) (c - '0') / dd;
373
- dd *= 10.0;
374
- ok = TRUE;
375
- c = *buf++;
376
- if (!c)
377
- break;
378
- else
379
- ++chars;
380
- }
381
- }
382
- if (!ok)
383
- return count;
384
- if (width > 0 && (c == 'e' || c == 'E'))
385
- {
386
- eneg = FALSE;
387
- exp = 0;
388
- NEXT(c);
389
- --width;
390
- if (width > 0 && c == '+')
391
- {
392
- NEXT(c);
393
- --width;
394
- } else if (width > 0 && c == '-')
395
- {
396
- eneg = TRUE;
397
- NEXT(c);
398
- --width;
399
- }
400
- if (!(width > 0 && isdigit(c)))
401
- {
402
- UNGETC();
403
- return count;
404
- }
405
- while (width > 0 && isdigit(c))
406
- {
407
- --width;
408
- exp = exp * 10 + (c - '0');
409
- c = *buf++;
410
- if (!c)
411
- break;
412
- else
413
- ++chars;
414
- }
415
- if (eneg)
416
- exp = -exp;
417
- while (exp > 0)
418
- {
419
- dx *= 10.0;
420
- --exp;
421
- }
422
- while (exp < 0)
423
- {
424
- dx /= 10.0;
425
- ++exp;
426
- }
427
- }
428
- if (assign)
429
- {
430
- if (neg)
431
- dx = -dx;
432
- if (size == 'l')
433
- {
434
- dbl_ptr = va_arg(arg_ptr, double *);
435
- *dbl_ptr = dx;
436
- }
437
- else
438
- {
439
- flt_ptr = va_arg(arg_ptr, float *);
440
- *flt_ptr = (float)dx;
441
- }
442
- ++count;
443
- }
444
- if (!c)
445
- return count;
446
- else
447
- UNGETC();
448
- break;
449
- case 'i':
450
- neg = FALSE;
451
- radix = 10;
452
- do
453
- {
454
- NEXT(c);
455
- }
456
- while (WHITE(c));
457
- if (!(width > 0 && c == '0'))
458
- goto scan_complete_number;
459
- NEXT(c);
460
- --width;
461
- if (width > 0 && (c == 'x' || c == 'X'))
462
- {
463
- NEXT(c);
464
- radix = 16;
465
- --width;
466
- }
467
- else if (width > 0 && (c >= '0' && c <= '7'))
468
- radix = 8;
469
- goto scan_unsigned_number;
470
- case 'd':
471
- case 'u':
472
- case 'o':
473
- case 'x':
474
- case 'X':
475
- do
476
- {
477
- NEXT(c);
478
- }
479
- while (WHITE(c));
480
- switch (f)
481
- {
482
- case 'o':
483
- radix = 8;
484
- break;
485
- case 'x':
486
- case 'X':
487
- radix = 16;
488
- break;
489
- default:
490
- radix = 10;
491
- break;
492
- }
493
- scan_complete_number:
494
- neg = FALSE;
495
- if (width > 0 && c == '+')
496
- {
497
- NEXT(c);
498
- --width;
499
- }
500
- else if (width > 0 && c == '-' && radix == 10)
501
- {
502
- neg = TRUE;
503
- NEXT(c);
504
- --width;
505
- }
506
- scan_unsigned_number:
507
- n = 0;
508
- ok = FALSE;
509
- while (width > 0)
510
- {
511
- --width;
512
- if (isdigit(c))
513
- d = c - '0';
514
- else if (isupper(c))
515
- d = c - 'A' + 10;
516
- else if (islower(c))
517
- d = c - 'a' + 10;
518
- else
519
- break;
520
- if (d < 0 || d >= radix)
521
- break;
522
- ok = TRUE;
523
- n = n * radix + d;
524
- c = *buf++;
525
- if (!c)
526
- break;
527
- else
528
- ++chars;
529
- }
530
- if (!ok)
531
- return count;
532
- if (assign)
533
- {
534
- if (neg)
535
- n = -n;
536
- switch (size)
537
- {
538
- case 'h':
539
- short_ptr = va_arg(arg_ptr, short *);
540
- *short_ptr = (short) n;
541
- break;
542
- case 'l':
543
- long_ptr = va_arg(arg_ptr, long *);
544
- *long_ptr = (long) n;
545
- break;
546
- default:
547
- int_ptr = va_arg(arg_ptr, int *);
548
- *int_ptr = (int) n;
549
- }
550
- ++count;
551
- }
552
- if (!c)
553
- return count;
554
- else
555
- UNGETC();
556
- break;
557
- case 'n':
558
- if (assign)
559
- {
560
- int_ptr = va_arg(arg_ptr, int *);
561
- *int_ptr = chars;
562
- ++count;
563
- }
564
- break;
565
- default:
566
- if (!f) /* % at end of string */
567
- return count;
568
- NEXT(c);
569
- if (c != f)
570
- return count;
571
- break;
572
- }
573
- ++fmt;
574
- }
575
- }
576
- return count;
577
- }
578
- #endif /* HAVE_VSSCANF */