TO-DO revision 50276
150276Speter-- $Id: TO-DO,v 1.39 1998/07/12 00:25:39 tom Exp $
250276Speter
350276SpeterSHORT-TERM TO-DO ITEMS:
450276Speter
550276SpeterKnown Problems:
650276Speter
750276Speter* GNAT does not put libraries in the correct order, so a build only links
850276Speter  properly if you use shared libraries since -lncurses is first.
950276Speter
1050276Speter* XPG4 specifies that the enhanced features are not available unless the
1150276Speter  _XOPEN_SOURCE_EXTENDED test macro is defined by the application.  Ncurses uses
1250276Speter  this macro (incorrectly) to address a dependency upon wchar_t.  The functions
1350276Speter  which use wchar_t are not implemented, so the effect of the test macro is
1450276Speter  pointless.
1550276Speter
1650276Speter* The screen optimization has been tested only in an ad hoc manner.  We should
1750276Speter  develop a good set of regression tests to cover lib_doupdate.c and
1850276Speter  lib_mvcur.c.
1950276Speter
2050276Speter* Magic cookie support does not work, since the logic does not take into account
2150276Speter  refresh.  Also, the initial optimize does not adjust the current location
2250276Speter  when a cookie is emitted.
2350276Speter
2450276Speter* Scrolling optimization has holes: for example, it forces repaints of the
2550276Speter  screen between calls to refresh().
2650276Speter
2750276Speter* SVr4 uses slightly different rules for determining when softkeys are shown.
2850276Speter  For example, they are initially displayed (before the ncurses 'e' test
2950276Speter  activates them), and a touchwin can apparently also force them to be
3050276Speter  displayed.
3150276Speter
3250276Speter+ The code departs from perfect 8-bit cleanness in one respect; you cannot
3350276Speter  specify a character \200 as part of a capability string, because the terminfo
3450276Speter  library interprets \200 as a request to embed NUL (\000) at that point.  This
3550276Speter  is a legacy terminfo property we can't mess with.
3650276Speter
3750276Speter* The window classes defined in the c++ subdirectory need documentation.
3850276Speter  Some C++ programmer could earn a lot of good karma by doing this...
3950276Speter
4050276SpeterPortability (or lack thereof):
4150276Speter
4250276Speter* Users of older System V UNIXes (but not Solaris, and probably not SVr4)
4350276Speter  may trip over a known problem with the signal-handling code which causes
4450276Speter  abrupt termination of ncurses applications following resume from a ^Z
4550276Speter  suspend (this problem was first seen running lynx).  You will not see 
4650276Speter  this problem if you are running Linux or one of the 4.4BSD derivatives
4750276Speter  like FreeBSD, NetBSD, or BSDI.  For details, see the analysis in the
4850276Speter  header comment of ncurses/lib_tstp.c.
4950276Speter
5050276Speter* In theory, vwprintw and vwscanf are supposed to use the older varargs.h
5150276Speter  interface for handling variadic argument lists.  Linux doesn't have
5250276Speter  varargs.h, it has the newer X/Open-standard stdargs.h equivalent. So
5350276Speter  these functions use stdargs instead.  This is unlikely to be a problem 
5450276Speter  unless you're building ncurses on a System V old enough to only have
5550276Speter  varargs.h.  (Solaris 2.5.1 uses the stdarg.h binding as well).
5650276Speter
5750276Speter* If you're using a BSD earlier than 4.4BSD, or a Linux old enough not to
5850276Speter  have a native vsscanf(3) in its library, vwscanw() will not work.  You lose.
5950276Speter  (It should work on any System V, however).  If you want to fix this, add
6050276Speter  an implementation to ncurses/vsscanf.c.
6150276Speter
6250276Speter* The demo build for the c++ library craps out with many link errors under gcc
6350276Speter  2.6.3.  We're told the C++ support in 2.6.3 is broken and that the right
6450276Speter  fix is to upgrade to 2.7.0.  This demo is also known to not build with
6550276Speter  the Sun SPARCworks 4.1 C++ compiler, due to a problem resolving templates.
6650276Speter
6750276Speter* Under Ultrix, configure craps out (Ultrix sh is lame).  Run it under ksh.
6850276Speter
6950276Speter* We've not tested the configure script with cross-compilers.  The autoconf
7050276Speter  tests are supposed to be able to support this (please report bugs).  You will
7150276Speter  have to configure and build in two steps.  The first step must create the
7250276Speter  automatically-generated sources (e.g., comp_captab.c) on your host machine. 
7350276Speter  Then, run "make mostlyclean", remove config.* from the top-level directory
7450276Speter  and configure for the cross-compiler.
7550276Speter
7650276Speter+ terminfo.5 does not format with the SunOS (and most other platform's) tbl
7750276Speter  utility because it relies on a diversion for each table entry.  Get the groff
7850276Speter  package.
7950276Speter
8050276SpeterUntested features:
8150276Speter
8250276Speter* The code for the HP color model using set_color_pair is untested.
8350276Speter
8450276Speter* The code for handling soft labels on a terminal type with built-in support
8550276Speter  for them (num_labels > 0, label_height, label_width, label_format, label_off,
8650276Speter  label_on, plab_norm, lab_f*) has not been tested.  The label_format and
8750276Speter  lab_f* capabilities aren't presently used.
8850276Speter
8950276SpeterLONGER-TERM TO-DO ITEMS:
9050276Speter
9150276Speter1. Extended COSE conformance
9250276Speter
9350276SpeterThere is an XPG4 standard recently released which describes a superset
9450276Speterof the SVr4 API.  The library is BASE conformant with this standard.
9550276SpeterWe would like to make ncurses fully conformant at the EXTENDED level
9650276Spetersupporting internationalization.
9750276Speter
9850276SpeterHere are page references to all material involving wide or multi-byte
9950276Spetercharacters in Issue 4 of the XSI Curses standard, with notes on their
10050276Speterstatus in this implementation:
10150276Speter
10250276Speter	Page 1 (1.1.2) New Features discussion of internationalization.
10350276Speter	Page 12 (2.4): Definition of cchar_t, wchar_t.
10450276Speter	Page 16 (3.3.2): Introduction of multi-column characters.
10550276Speter	Page 17-18 (3.3.5): Description of non-spacing characters.
10650276Speter	Page 19-21 (3.4.2): Basic character operations.
10750276Speter	Page 34 (addnstr): These should now call underlying wide-
10850276Spetercharacter functions, and do (through waddnstr) if _XOPEN_SOURCE_EXTENDED is on).
10950276Speter	Page 35 (addnwstr): wide-character add-string functions.  All macros 
11050276Speterexcept waddnwstr() which is not yet defined.
11150276Speter	Page 36 (add_wch): wide-character add-char functions.  All macros 
11250276Speterexcept wadd_wch() which is not yet defined.
11350276Speter	Page 39 (attr_get): implemented -- we've just made the current-
11450276Speterattributes field of the window an attr_t.
11550276Speter	Page 43 (bkgrnd):  None of these are implemented.
11650276Speter	Page 45 (border_set): Neither of these is implemented.
11750276Speter	Page 47 (box_set): box_set implemented as macro, but the underlying
11850276Speterwborder_set() is not yet defined.
11950276Speter	Page 78 (echo_wchar): echo_wchar() implemented as macro, underlying
12050276Speterwecho_wchar() not yet implemented.
12150276Speter	Page 81 (erasechar): Neither entry point is implemented.
12250276Speter	Page 87 (getbkgrnd): Not implemented.
12350276Speter	Page 88 (getcchar): Not implemented.
12450276Speter	Page 93 (getn_wstr): All implemented (as macros) except the
12550276Speterunderlying wgetn_wstr().
12650276Speter	Page 97 (get_wch):  All implemented (as macros) except the
12750276Speterunderlying wget_wch().
12850276Speter	Page 99 (get_wstr): Xref to page 93.
12950276Speter	Page 105 (hline_set): All implemented (as macros) except the
13050276Speterunderlying whline_set(), wvline_set().
13150276Speter	Page 114 (innstr): Multi-byte character-completeness check is
13250276Speternot implemented.
13350276Speter	Page 115 (innwstr): All implemented (as macros) except the
13450276Speterunderlying winnw_str().
13550276Speter	Page 119 (insnstr): Implementation may not be correct for multi-byte
13650276Spetercharacters.
13750276Speter	Page 120 (ins_nwstr): Not implemented.
13850276Speter	Page 121 (insstr): Xref to page 119.
13950276Speter	Page 122 (instr): Xref to page 119.
14050276Speter	Page 123 (ins_wch): Not implemented.
14150276Speter	Page 124 (ins_wstr): Xref to page 120.
14250276Speter	Page 126 (in_wch): Not implemented.
14350276Speter	Page 127 (in_wchnstr): Not implemented.
14450276Speter	Page 128 (inwstr): Xref to page 115.
14550276Speter	Page 133 (killwchar): killwchar not implemented.
14650276Speter	Page 158 (pechochar): pecho_wchar() not implemented.
14750276Speter	Page 176 (setcchar): Not implemented.
14850276Speter	Page 181 (slk_attroff): slk_wset not implemented.
14950276Speter	Page 200 (ungetch): unget_wch() not implemented.
15050276Speter	Page 203 (vidattr): vid_attr() and vid_puts() not implemented.
15150276Speter	Page 206 (vline_set): Xref to page 105.
15250276Speter	Page 214 (wunctrl): Not implemented.
15350276Speter	Page 216 (curses.h): cchar_t, wint_t, wchar_t references.
15450276Speter	Page 220 (curses.h): KEY_CODE_YES
15550276Speter
15650276SpeterBasically, the macro superstructure is there but the core is absent.  We
15750276Speterneed better multi-locale support guarantees from the OS to finish this.
15850276SpeterIf you are working on internationalization support, please contact us so
15950276Speterwe can cooperate.
16050276Speter
16150276Speter2. DOS port
16250276Speter
16350276SpeterOnly 16 of the 55 files in the library depend on the terminfo format.
16450276SpeterIt should be possible to further kernelize the package, then rewrite 
16550276Spetera small number of core files to produce a functionally-compatible
16650276Speterport that would do updates to a memory-mapped screen area.  The first
16750276Speterresult of this would be a DOS port.
16850276Speter
16950276Speter3. X port
17050276Speter
17150276SpeterIt would be nice if ncurses could recognize when it was running under X and
17250276Spetermaintain its own window.  With this feature, all ncurses programs would
17350276Speterautomatically become X programs.  The challenge is to handle resize events
17450276Speterproperly.
17550276Speter
17650276Speter4. Unused capabilities
17750276Speter
17850276SpeterThe currently unused capabilities fall naturally into several groups:
17950276Speter
18050276SpeterA. Status-line capabilities:
18150276Speter
18250276Speter	Booleans: has_status_line, status_line_esc_ok.
18350276Speter	Numerics: width_status_line.
18450276Speter	Strings: dis_status_line, from_status_line, to_status_line.
18550276Speter
18650276SpeterSystem V Release 1 curses made no use of these at all.  SVr4's use, if
18750276Speterany, is unknown.  From the AT&T termcap file it looks like curses, in general,
18850276Spetershouldn't use them; terminal variants with status lines have their line count
18950276Speterdecremented by 1, suggesting that curses is supposed to leave the status line
19050276Speteralone.
19150276Speter
19250276SpeterB. Printer capabilities:
19350276Speter
19450276Speter	Boolean: col_addr_glitch, cr_cancels_micro_mode, has_print_wheel,
19550276Speter		row_addr_glitch, semi_auto_right_margin, cpi_changes_res,
19650276Speter		lpi_changes_res.
19750276Speter	Numeric: buffer_capacity, dot_horz_spacing, dot_vert_spacing,
19850276Speter		max_micro_address, max_micro_jump, micro_col_size,
19950276Speter		micro_line_size, number_of_pins, output_res_char,
20050276Speter		output_res_line, output_res_horz_inch, print_rate,
20150276Speter		wide_char_size, bit_image_entwining, bit_image_type.
20250276Speter	String: down_half_line, form_feed, up_half_line, set_left_margin,
20350276Speter		set_right_margin, clear_margins, change_char_pitch
20450276Speter		... set_page_length (all the SVr4 printer caps),
20550276Speter
20650276SpeterCurses doesn't use these.
20750276Speter
20850276SpeterC. Printer-control capabilities:
20950276Speter
21050276Speter	Boolean: prtr_silent.
21150276Speter	Strings: print_screen, prtr_on, prtr_off, prtr_non.
21250276Speter
21350276SpeterCurses doesn't use these.
21450276Speter
21550276SpeterD. Dialer strings:
21650276Speter
21750276Speter	Strings: hangup, dial_phone, quick_dial, tone, pulse, flash_hook,
21850276Speter		fixed_pause, wait_tone.
21950276Speter
22050276SpeterCurses doesn't use these.
22150276Speter
22250276SpeterE. Window and virtual-terminal capabilities:
22350276Speter
22450276Speter	Numerics: maximum_windows, virtual_terminal.
22550276Speter	Strings: req_for_input, create_window, goto_window, set_window.
22650276Speter
22750276SpeterThese seem to be fossils from some AT&T experiments on character-based
22850276Speterwindow systems that never escaped the lab.  The virtual_terminal cap had
22950276Spetersomething to do with building terminal emulations into tty line disciplines.
23050276Speter
23150276SpeterF. Unused VDT capabilities:
23250276Speter
23350276Speter	Booleans: erase_overstrike, has_meta_key, insert_null_glitch,
23450276Speter		move_insert, dest_tabs_magic_smso, transparent_underline,
23550276Speter		needs_xon_xoff, hard_cursor.
23650276Speter	Numerics: lines_of_memory, buttons.
23750276Speter	Strings: pkey_key, pkey_local, pkey_xmit, underline_char, 
23850276Speter		enter_xon_mode,	exit_xon_mode, xon_character, xoff_character, 
23950276Speter		display_clock, remove_clock, user[0-5], display_pc_char,
24050276Speter		enter_scancode_mode, exit_scancode_mode, pc_term_options, 
24150276Speter		scancode_escape, alt_scancode_esc.
24250276Speter
24350276SpeterThese are the potentially important ones for ncurses.  Notes:
24450276Speter
24550276Speter	i) ncurses doesn't need move_insert; it never uses cup/hpa/vpa while
24650276Speter		insert_mode is on.
24750276Speter
24850276Speter	ii) We probably don't care about dest_tabs_magic_smso; only
24950276Speter		Telerays used it and they're all long obsolete.
25050276Speter
25150276Speter
252