ncurses 4.1
[ncurses.git] / TO-DO
1 SHORT-TERM TO-DO ITEMS:
2
3 Known Problems:
4
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
7   lib_mvcur.c.
8
9 * Ncurses cursor movement does not make effective use of hard tabs, as SVr4
10   does.
11
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().
16
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.
20
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.
24
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
28   displayed.
29
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.
35
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
41   be kind of ugly.
42
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...
45
46 Portability (or lack thereof):
47
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.
55
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
61   varargs.h.
62
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.
67
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.
71
72 * Under Ultrix, configure craps out (Ultrix sh is lame).  Run it under ksh.
73
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.
80
81 Untested features:
82
83 * The rep optimization in lib_doupdate.c is not yet thoroughly tested.
84
85 * The code for the HP color model using set_color_pair is untested.
86
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.
91
92 LONGER-TERM TO-DO ITEMS:
93
94 1. Extended COSE conformance
95
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.
100
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:
104
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
135 not implemented.
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
139 characters.
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
158
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
162 we can cooperate.
163
164 2. DOS port
165
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.
171
172 3. X port
173
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
177 properly.
178
179 4. Unused capabilities
180
181 The currently unused capabilities fall naturally into several groups:
182
183 A. Status-line capabilities:
184
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.
188
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
193 alone.
194
195 B. Printer capabilities:
196
197         Boolean: col_addr_glitch, cr_cancels_micro_mode, has_print_wheel,
198                 row_addr_glitch, semi_auto_right_margin, cpi_changes_res,
199                 lpi_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),
208
209 Curses doesn't use these.
210
211 C. Printer-control capabilities:
212
213         Boolean: prtr_silent.
214         Strings: print_screen, prtr_on, prtr_off, prtr_non.
215
216 Curses doesn't use these.
217
218 D. Dialer strings:
219
220         Strings: hangup, dial_phone, quick_dial, tone, pulse, flash_hook,
221                 fixed_pause, wait_tone.
222
223 Curses doesn't use these.
224
225 E. Window and virtual-terminal capabilities:
226
227         Numerics: maximum_windows, virtual_terminal.
228         Strings: req_for_input, create_window, goto_window, set_window.
229
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.
233
234 F. Unused VDT capabilities:
235
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.
245
246 These are the potentially important ones for ncurses.  Notes:
247
248         i) ncurses doesn't need move_insert; it never uses cup/hpa/vpa while
249                 insert_mode is on.
250
251         ii) We probably don't care about dest_tabs_magic_smso; only
252                 Telerays used it and they're all long obsolete.
253
254