1 SHORT-TERM TO-DO ITEMS:
5 * The screen optimization has been tested only in an ad hoc manner. We should
6 develop a good set of regression tests to cover lib_doupdate.c and
9 * Ncurses cursor movement does not make effective use of hard tabs, as SVr4
12 * Scrolling optimization has holes: for example, the ncurses 'p' test, which
13 exercises scrolling in a pad does not (1996/12/24) use scrolling regions.
14 Also, running other tests shows that scrolling optimization forces repaints
15 of the screen between calls to refresh().
17 * The stacking order of windows on the screen does not match that implemented
18 in SVr4 (e.g., Solaris curses). XSI doesn't specify a stacking order, so
19 full compatibility for this behavior must be achieved by testing/analysis.
21 * The ncurses 'o' test does not behave the same on SVr4 (Solaris) as with
22 ncurses (the latter pops windows up more). The former also produces 20%
23 fewer characters in a 'script' output. Further analysis is needed.
25 * SVr4 uses slightly different rules for determining when softkeys are shown.
26 For example, they are initially displayed (before the ncurses 'e' test
27 activates them), and a touchwin can apparently also force them to be
30 * The code departs from perfect 8-bit cleanness in one respect; you cannot
31 specify a character \200 as part of a capability string, because the terminfo
32 library interprets \200 as a request to embed NUL (\000) at that point (the
33 actual code that does this is in ncurses/lib_options.c:add_keytry().
34 This is a legacy terminfo property we can't mess with.
36 * Recognition of xterm mouse reports is implemented by setting the kmous
37 capability to the mouse-report prefix. As a result, the kmous sequence is
38 eaten even when mouse recognition is disabled. This could be fixed if
39 necessary with special code that pokes the kmous value back into the
40 input FIFO when KEY_MOUSE is seen and the mousemask is zero, but that would
43 * The window classes defined in the c++ subdirectory need documentation.
44 Some C++ programmer could earn a lot of good karma by doing this...
46 Portability (or lack thereof):
48 * Users of older System V UNIXes (but not Solaris, and probably not SVr4)
49 may trip over a known problem with the signal-handling code which causes
50 abrupt termination of ncurses applications following resume from a ^Z
51 suspend (this problem was first seen running lynx). You will not see
52 this problem if you are running Linux or one of the 4.4BSD derivatives
53 like FreeBSD, NetBSD, or BSDI. For details, see the analysis in the
54 header comment of ncurses/lib_tstp.c.
56 * In theory, vwprintw and vwscanf are supposed to use the older varargs.h
57 interface for handling variadic argument lists. Linux doesn't have
58 varargs.h, it has the newer X/Open-standard stdargs.h equivalent. So
59 these functions use stdargs instead. This is unlikely to be a problem
60 unless you're building ncurses on a System V old enough to only have
63 * If you're using a BSD earlier than 4.4BSD, or a Linux old enough not to
64 have a native vsscanf(3) in its library, vwscanw() will not work. You lose.
65 (It should work on any System V, however). If you want to fix this, add
66 an implementation to ncurses/vsscanf.c.
68 * The demo build for the c++ library craps out with many link errors under gcc
69 2.6.3. We're told the C++ support in 2.6.3 is broken and that the right
70 fix is to upgrade to 2.7.0.
72 * Under Ultrix, configure craps out (Ultrix sh is lame). Run it under ksh.
74 * We've not tested the configure script with cross-compilers. The autoconf
75 tests are supposed to be able to support this (please report bugs). You will
76 have to configure and build in two steps. The first step must create the
77 automatically-generated sources (e.g., comp_captab.c) on your host machine.
78 Then, run "make mostlyclean", remove config.* from the top-level directory
79 and configure for the cross-compiler.
83 * The rep optimization in lib_doupdate.c is not yet thoroughly tested.
85 * The code for the HP color model using set_color_pair is untested.
87 * The code for handling soft labels on a terminal type with built-in support
88 for them (num_labels > 0, label_height, label_width, label_format, label_off,
89 label_on, plab_norm, lab_f*) has not been tested. The label_format and
90 lab_f* capabilities aren't presently used.
92 LONGER-TERM TO-DO ITEMS:
94 1. Extended COSE conformance
96 There is an XPG4 standard recently released which describes a superset
97 of the SVr4 API. The library is BASE conformant with this standard.
98 We would like to make ncurses fully conformant at the EXTENDED level
99 supporting internationalization.
101 Here are page references to all material involving wide or multi-byte
102 characters in Issue 4 of the XSI Curses standard, with notes on their
103 status in this implementation:
105 Page 1 (1.1.2) New Features discussion of internationalization.
106 Page 12 (2.4): Definition of cchar_t, wchar_t.
107 Page 16 (3.3.2): Introduction of multi-column characters.
108 Page 17-18 (3.3.5): Description of non-spacing characters.
109 Page 19-21 (3.4.2): Basic character operations.
110 Page 34 (addnstr): These should now call underlying wide-
111 character functions, and do (through waddnstr) if _XOPEN_SOURCE_EXTENDED is on).
112 Page 35 (addnwstr): wide-character add-string functions. All macros
113 except waddnwstr() which is not yet defined.
114 Page 36 (add_wch): wide-character add-char functions. All macros
115 except wadd_wch() which is not yet defined.
116 Page 39 (attr_get): implemented -- we've just made the current-
117 attributes field of the window an attr_t.
118 Page 43 (bkgrnd): None of these are implemented.
119 Page 45 (border_set): Neither of these is implemented.
120 Page 47 (box_set): box_set implemented as macro, but the underlying
121 wborder_set() is not yet defined.
122 Page 78 (echo_wchar): echo_wchar() implemented as macro, underlying
123 wecho_wchar() not yet implemented.
124 Page 81 (erasechar): Neither entry point is implemented.
125 Page 87 (getbkgrnd): Not implemented.
126 Page 88 (getcchar): Not implemented.
127 Page 93 (getn_wstr): All implemented (as macros) except the
128 underlying wgetn_wstr().
129 Page 97 (get_wch): All implemented (as macros) except the
130 underlying wget_wch().
131 Page 99 (get_wstr): Xref to page 93.
132 Page 105 (hline_set): All implemented (as macros) except the
133 underlying whline_set(), wvline_set().
134 Page 114 (innstr): Multi-byte character-completeness check is
136 Page 115 (innwstr): All implemented (as macros) except the
137 underlying winnw_str().
138 Page 119 (insnstr): Implementation may not be correct for multi-byte
140 Page 120 (ins_nwstr): Not implemented.
141 Page 121 (insstr): Xref to page 119.
142 Page 122 (instr): Xref to page 119.
143 Page 123 (ins_wch): Not implemented.
144 Page 124 (ins_wstr): Xref to page 120.
145 Page 126 (in_wch): Not implemented.
146 Page 127 (in_wchnstr): Not implemented.
147 Page 128 (inwstr): Xref to page 115.
148 Page 133 (killwchar): killwchar not implemented.
149 Page 158 (pechochar): pecho_wchar() not implemented.
150 Page 176 (setcchar): Not implemented.
151 Page 181 (slk_attroff): slk_wset not implemented.
152 Page 200 (ungetch): unget_wch() not implemented.
153 Page 203 (vidattr): vid_attr() and vid_puts() not implemented.
154 Page 206 (vline_set): Xref to page 105.
155 Page 214 (wunctrl): Not implemented.
156 Page 216 (curses.h): cchar_t, wint_t, wchar_t references.
157 Page 220 (curses.h): KEY_CODE_YES
159 Basically, the macro superstructure is there but the core is absent. We
160 need better multi-locale support guarantees from the OS to finish this.
161 If you are working on internationalization support, please contact us so
166 Only 16 of the 55 files in the library depend on the terminfo format.
167 It should be possible to further kernelize the package, then rewrite
168 a small number of core files to produce a functionally-compatible
169 port that would do updates to a memory-mapped screen area. The first
170 result of this would be a DOS port.
174 It would be nice if ncurses could recognize when it was running under X and
175 maintain its own window. With this feature, all ncurses programs would
176 automatically become X programs. The challenge is to handle resize events
179 4. Unused capabilities
181 The currently unused capabilities fall naturally into several groups:
183 A. Status-line capabilities:
185 Booleans: has_status_line, status_line_esc_ok.
186 Numerics: width_status_line.
187 Strings: dis_status_line, from_status_line, to_status_line.
189 System V Release 1 curses made no use of these at all. SVr4's use, if
190 any, is unknown. From the AT&T termcap file it looks like curses, in general,
191 shouldn't use them; terminal variants with status lines have their line count
192 decremented by 1, suggesting that curses is supposed to leave the status line
195 B. Printer capabilities:
197 Boolean: col_addr_glitch, cr_cancels_micro_mode, has_print_wheel,
198 row_addr_glitch, semi_auto_right_margin, cpi_changes_res,
200 Numeric: buffer_capacity, dot_horz_spacing, dot_vert_spacing,
201 max_micro_address, max_micro_jump, micro_col_size,
202 micro_line_size, number_of_pins, output_res_char,
203 output_res_line, output_res_horz_inch, print_rate,
204 wide_char_size, bit_image_entwining, bit_image_type.
205 String: down_half_line, form_feed, up_half_line, set_left_margin,
206 set_right_margin, clear_margins, change_char_pitch
207 ... set_page_length (all the SVr4 printer caps),
209 Curses doesn't use these.
211 C. Printer-control capabilities:
213 Boolean: prtr_silent.
214 Strings: print_screen, prtr_on, prtr_off, prtr_non.
216 Curses doesn't use these.
220 Strings: hangup, dial_phone, quick_dial, tone, pulse, flash_hook,
221 fixed_pause, wait_tone.
223 Curses doesn't use these.
225 E. Window and virtual-terminal capabilities:
227 Numerics: maximum_windows, virtual_terminal.
228 Strings: req_for_input, create_window, goto_window, set_window.
230 These seem to be fossils from some AT&T experiments on character-based
231 window systems that never escaped the lab. The virtual_terminal cap had
232 something to do with building terminal emulations into tty line disciplines.
234 F. Unused VDT capabilities:
236 Booleans: erase_overstrike, has_meta_key, insert_null_glitch,
237 move_insert, dest_tabs_magic_smso, transparent_underline,
238 needs_xon_xoff, hard_cursor.
239 Numerics: lines_of_memory, buttons.
240 Strings: pkey_key, pkey_local, pkey_xmit, underline_char,
241 enter_xon_mode, exit_xon_mode, xon_character, xoff_character,
242 display_clock, remove_clock, user[0-5], display_pc_char,
243 enter_scancode_mode, exit_scancode_mode, pc_term_options,
244 scancode_escape, alt_scancode_esc.
246 These are the potentially important ones for ncurses. Notes:
248 i) ncurses doesn't need move_insert; it never uses cup/hpa/vpa while
251 ii) We probably don't care about dest_tabs_magic_smso; only
252 Telerays used it and they're all long obsolete.