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